0
我正在使用MVC创建一些简单的CRUD页面。我有一个stringly类型的用户控制,我包括我的创建和编辑的观点,看起来像这样:MVC不在文本框中呈现模型属性
<% using (Html.BeginForm()) {%>
<div class="form">
<%:this.Model.Title%>
<p>
<label for="Title">Title:</label>
<%= Html.TextBox("Title", this.Model.Title) %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="Summary">Summary:</label>
<%= Html.TextBox("Summary", this.Model.Summary)%>
<%= Html.ValidationMessage("Summary", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</div>
<% } %>
..A创建行动,看起来像这样:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string title, string summary)
{
Tour tour = this.TourManager.CreateTour(string.IsNullOrEmpty(title) ? DefaultText.TourTitle : title, string.IsNullOrEmpty(summary)? DefaultText.TourSummary : summary);
return this.View("Edit", tour);
}
...和编辑动作,看起来像这样:
public ActionResult Edit(int id)
{
Tour tour = this.TourManager.GetTour(id);
return this.View("Edit", tour);
}
我遇到的问题是,<%= Html.TextBox("Title", this.Model.Title) %>
不渲染文本中的文本。 <%:this.Model.Title%>
呈现良好,所以我知道模型已填充。只有从Create操作返回视图(URL为/ MyEntity/Create)时才会发生这种情况。当使用类似于/ MyEntity/Edit/1的URL调用Edit动作时,文本在文本框中呈现良好。这两个操作都将填充的模型传递给编辑视图,所以我不明白为什么会发生这种情况。
我之所以没有这样做的原因是因为我有一个单元测试,它声明Create动作将默认值放入模型中。 RedirectToRouteResult不包含模型,所以它使我很难测试。 – Charlie 2009-12-12 23:50:21
这不是很好的理由。您应该在TourManager.CreateTour测试中检查这些默认值,而不是此操作测试。 – LukLed 2009-12-13 00:04:04
这个答案是正确的。 ModelState问题是一个错误。无论是否通过设计,它都会让我失望。 =) – 2009-12-13 01:17:25