为什么TryUpdateModel()不验证textboxfor或更新模型?

时间:2012-08-01 04:28:21

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

我的视图有几个editorfor / textboxfors

<% using(Html.BeginForm("New", "Controller", FormMethod.Post)) {%>
    <%: Html.ValidationSummary(false) %>
    <div>Address</div>
    <div><%: Html.EditorFor(model => model.Address)</div>
    <div>Zip Code</div>
    <div><%: Html.EditorFor(model => model.Zip)</div>
    <div>Total Mats</div>
    <div><%: Html.EditorFor(model => model.TotalMats)</div>
    <input type="image" src="<%: Url.Content("~/Content/Images/submit.png") %>" name="Submit" />
   <% } %>

动作:

public ActionResult Edit(int Id, FormCOllecion) {
    Event event = context.Event.FirstOrDefault(e => e.Id == Id);
    if (TryUpdateModel(event) {
       context.SaveChanges;
       return RedirectToAction("Index", "Controller", new {value = Id});
    }
    return View(event);
}

型号:

[Bind(Include="Name,Date")]
public class Event
{
     public int Id { get; set; }
     public string Name { get; set; }
     public DateTime Date { get; set; }
     public int Participants { get; set; }
     public int TotalMats { get; set; }
}

所以前两个EditorFors是字符串,而最后一个是int(在Model上)。这是我注意到的一件事。我不确定它是否相关。但每次我点击提交时,formcollection将显示TotalMats字段的值。但是一旦它通过TryUpdateModel,它就不会更新模型的属性。有什么我想念的吗?在我的一些页面上使用属性为int类型的情况就是如此。我不得不进行手动FormCollection [“key”]检索,但我不得不做其他验证,以确保它不会因非整数值而爆炸。

1 个答案:

答案 0 :(得分:1)

问题不是你的BindAttribute

http://msdn.microsoft.com/en-us/library/system.web.mvc.bindattribute.include

根据文档,只会绑定/更新Include列表中列出的属性。您的ints不在列表中。