2016-09-07 2 views
-1

Можно ли преобразовать formcollection в известную 'модель'?как преобразовать формуcollection в модель в 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> 

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-content и data- атрибуты самозагрузки поповер.

+1

Не используйте коллекцию форм. Используйте 'public ActionResult (Student model)' так, чтобы он был правильно привязан, и вы воспользуетесь всеми другими функциями 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); 
}