2016-09-07 40 views
-1

是否有可能将formcollection转换为已知的“模型”?如何将formcollection转换为mvc中的模型

[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> 

控制器:

[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-属性是引导酥料饼。

+1

请勿使用表单集合。使用'公共ActionResult(学生模型)',以便其正确绑定,并利用MVC的所有其他功能,包括验证 –

+0

请发布您的视图代码和模型代码。另外,你为什么要这样做?是因为你不知道模型绑定? – ekad

+0

@ekad再次检查我的代码'data-content' – sridharnetha

回答

1

你可以试试这个方法

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

在MVC的另一种方法是使用TryUpdateModel

示例: TryUpdateModel或UpdateModel将从已发布的表单集合中读取并尝试将其映射到您的类型。我发现这比手动手动映射字段更优雅。

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

    UpdateModel<Student>(model); 

    return View(model); 
} 
相关问题