2016-09-07 9 views
-1

formcollectionを 'モデル'に変換できますか?mvcでformcollectionをモデルに変換する方法

[HttpPost] 
    public ActionResult Settings(FormCollection fc) 
    { 
    var model=(Student)fc; // Error: Can't convert type 'FormCollection' to 'Student' 
    } 

注:何らかの理由でViewModelを使用することはできません。

は、ここに私のコードビューである:Settings.cshtml

@model MediaLibrarySetting 
@{ 
ViewBag.Title = "Library Settings"; 
var extensions = (IQueryable<MediaLibrarySetting>)(ViewBag.Data);  
} 
@helper EntriForm(MediaLibrarySetting cmodel) 
{ 

<form action='@Url.Action("Settings", "MediaLibrary")' id='[email protected]' method='post' style='min-width:170px' class="smart-form"> 
    @Html.HiddenFor(model => cmodel.MediaLibrarySettingID) 
    <div class='input'> 
     <label> 
     New File Extension:@Html.TextBoxFor(model => cmodel.Extention, new { @class = "form-control style-0" }) 
     </label> 
     <small>@Html.ValidationMessageFor(model => cmodel.Extention)</small> 
    </div> 
    <div> 
     <label class='checkbox'> 
      @Html.CheckBoxFor(model => cmodel.AllowUpload, new { @class = "style-0" })<i></i>&nbsp; 
      <span>Allow Upload.</span></label> 
    </div> 
    <div class='form-actions'> 
     <div class='row'> 
      <div class='col col-md-12'> 
       <button class='btn btn-primary btn-sm' type='submit'>SUBMIT</button> 
      </div> 
     </div> 
    </div> 
</form> 
} 
<tbody> 
@foreach (var item in extensions) 
{ 
    if (item != null) 
    {          
    <tr> 
    <td> 
     <label class="checkbox"> 
     <input type="checkbox" value="@item.MediaLibrarySettingID"/><i></i> 
     </label> 
      </td> 
      <td> 
      <a href="javascript:void(0);" rel="popover" class="editable-click" 
      data-placement="right" 
      data-original-title="<i class='fa fa-fw fa-pencil'></i> File Extension" 
      data-content="@EntriForm(item).ToString().Replace("\"", "'")" 
      data-html="true">@item.Extention</a></td> 
        </tr> 
        } 
       } 
       </tbody> 

CONTROLLER:

[HttpPost] 
public ActionResult Settings(FormCollection fc)//MediaLibrarySetting cmodel - Works fine for cmodel 
{ 
     var model =(MediaLibrarySetting)(fc);// Error: Can't convert type 'FormCollection' to 'MediaLibrarySetting' 
} 

data-contentdata-属性は、ブートストラップポップオーバーです。あなたはMVCでこのよう

public ActionResult Settings(FormCollection formValues) 
    { 
    var student= new Student(); 
    student.Name = formValues["Name"]; 
    student.Surname = formValues["Surname"]; 
    student.CellNumber = formValues["CellNumber"]; 
    return RedirectToAction("Index"); 
    } 
+1

フォームコレクションを使用しないでください。 'Public ActionResult(Student model)'を使用して、正しくバインドされ、検証を含むMVCの他のすべての機能を利用するようにしてください。 –

+0

あなたのビューコードとモデルコードを投稿してください。また、なぜあなたはこれをしたいのですか?あなたはモデルバインディングについて知らないのですか? – ekad

+0

@ekad私のコードをもう一度 'data-content'でチェックしてください – sridharnetha

答えて

1

TryUpdateModelを使用することです。

例: TryUpdateModelまたはUpdateModelは、投稿されたフォームコレクションから読み取り、そのタイプにマッピングしようとします。手動でフィールドを手動でマッピングするよりも、これはよりエレガントです。

[HttpPost] 
public ActionResult Settings() 
{ 
    var model = new Student(); 

    UpdateModel<Student>(model); 

    return View(model); 
} 
4

別のアプローチを試みることができる

関連する問題