我在创建视图中使用了一个viewmodel。每件事都有效,但是在表格帖子中通过jquery我得到The Id field is required
ModelState错误。我已经看到了一些关于在模型类中添加[Bind(Exclude = "Id")]
注释的解决方案,但是当我在Update模型上调用相同的操作方法时,它从不绑定模型的Id并在db中插入新记录。
我的viewmodel看起来像
public class MemberSiteContactModel
{
public int Id { get; set; }
[Display(Name = "Name")]
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
// More items
}
我的部分视图看起来像
@model MemberSiteContactModel
<tr class="highlight">
<td class="col-sm-1">@Html.TextBoxFor(x => x.Name, new { @class = "name" })</td>
<td class="col-sm-2">@Html.TextBoxFor(x => x.ContactNo, new { @class = "contactNo" })</td>
<td class="col-sm-1"><input type="button" class="btn btn-xs btn-success contactSaveRow" value="Save" /></td>
<td class="col-sm-1"><input type="button" class="btn btn-xs btn-danger contactDeleteRow" value="Remove" name="btnRemoveContact" /></td>
</tr>
我的控制器看起来像
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveSiteContact(MemberSiteContactModel memberSiteContactModel)
{
if (ModelState.IsValid)
{
//processing
}
}
我还创建了一个示例应用程序来复制行为
public class CityModel
{
public int Id { get; set; }
[Display(Name = "City")]
[Required(ErrorMessage = "City is required")]
public string City { get; set; }
}
public ActionResult Contact()
{
return View();
}
@model WebApplication3.Models.CityModel
@using (@Html.BeginForm("SaveCity", "Home", FormMethod.Post))
{
@Html.HiddenFor(x => x.Id)
@Html.TextBoxFor(x => x.City)
<input type="submit" value="Submit" />
}
[HttpPost]
public ActionResult SaveCity(CityModel cityModel)
{
if (ModelState.IsValid)
{
}
return null;
}
答案 0 :(得分:1)
您没有传入ID,您需要添加一个隐藏字段,该字段保存为Id,否则ID将如何传递到已发布的模型中。
@Html.HiddenFor(x => x.Id)
答案 1 :(得分:0)
我使用MVC并遇到同样的问题,所以我查看了我的所有创建代码,发现我在调用时没有向View发送空模型。解决方案很简单;在Create()操作结果上,只需添加一行创建新的ViewModel并将其设置为View或Partial View返回的参数。像这样:
public ActionResult Create(){
ViewModel entity = new ViewModel();
return PartialView(entity);
}
我希望有所帮助。