是否可以将ModelState.IsValid应用于数据实体模型的一个表?

时间:2014-07-16 13:36:40

标签: c# asp.net-mvc-4

所以我目前有一个需要整个数据实体用于显示目的的视图,但我只想将一个表的数据发布到控制器并验证它。

@model MvcExample.Models.DataEntities   
@using(Html.BeginForm("ActionMethod", "Controller")){
         @Html.AntiForgeryToken()
         @Html.ValidationSummary(true)
        <table id="setupTable">
            <tr>
                <td>@Html.LabelFor(model => model.DataField.Local.First().data, "Data:")</td>
                <td>@Html.TextBoxFor(model => model.DataField.Local.First().data, new{id="dataField"})
                    @Html.ValidationMessageFor(model => model.DataField.Local.First().dataField)
                </td>
            </tr> 
<input type="submit" value="submit" />  
} 

是否可以将其发布到ActionMethod并使用ModelState.IsValid?

      [ActionName("Setup")]
      [AcceptVerbs(HttpVerbs.Post)]
      [ValidateAntiForgeryToken]
      public ActionResult ActionMethod(FormCollection formCollection)
      {
         if( ModelState.IsValid )
         {
            // Do Stuff
            db.SaveChanges();
         }

         var dataField= new DataField();
         db.DataField.Add( dataField);

         return View( db );
      }

1 个答案:

答案 0 :(得分:1)

想象一下,你有这两个模型。 MainModel是您的整个数据集,SubsetModel是您需要回发给Controller Action的数据。

public class MainModel
{
   public FieldOne First {get;set}
   public FieldTwo Second {get;set}
   public FieldThree Third {get;set;}
   public FieldFour Fourth {get;set;}
}

public class SubsetModel 
{
   public FieldOne First {get;set;}
   public FieldTwo Second {get;set;}
}

可以告诉您的Controller Action只是期望SubSetModel重新发布。

public ActionResult DoSomething(SubsetModel subset)
{
  //do something
}

在您的视图中,您需要在表单中包含相关字段,或使用Javascript / JQuery将数据发布回Controller。只要表单中的字段具有正确的名称,模型绑定器就会创建您的操作所期望的SubsetModel