C# MVC未在文本框中呈现模型属性

C# MVC未在文本框中呈现模型属性,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我正在使用MVC创建一些简单的CRUD页面。我有一个严格类型的用户控件,包含在创建和编辑视图中,如下所示: <% using (Html.BeginForm()) {%> <div class="form"> <%:this.Model.Title%> <p> <label for="Title">Title:</label> <%= Html.TextBox("Titl

我正在使用MVC创建一些简单的CRUD页面。我有一个严格类型的用户控件,包含在创建和编辑视图中,如下所示:

<% 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>
<% } %>
[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);
}
…和一个如下所示的编辑操作:

<% 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>
<% } %>
[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);
}

我遇到的问题是
没有呈现文本框中的文本<代码>渲染效果良好,因此我知道模型已填充。只有当视图从创建操作返回时(URL为/MyEntity/Create),才会发生这种情况。当使用类似/MyEntity/Edit/1的URL调用编辑操作时,文本在文本框中呈现良好。这两个操作都会将填充的模型传递到编辑视图,因此我不明白为什么会发生这种情况。

我建议您使用Post/Redirect/Get模式。行动后应:

[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 RedirectToAction("Edit", new { id = tour.id } );
}

您的问题可能与填充的ModelState有关,该ModelState不是空的,因为您没有使用重定向。MVC助手使用填充的ModelState中的值,即使您在指定的模型中有这些值。

我建议您使用Post/Redirect/Get模式。行动后应:

[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 RedirectToAction("Edit", new { id = tour.id } );
}

您的问题可能与填充的ModelState有关,该ModelState不是空的,因为您没有使用重定向。MVC帮助程序使用填充的ModelState中的值,即使您在指定的模型中有这些值。

我没有这样做的原因是因为我有一个单元测试,它断言创建操作将默认值放入模型中。RedirectToRouteResult不包含模型,因此我很难进行测试。这不是很好的理由。您应该在TourManager.CreateTour测试中检查这些默认值,而不是此操作测试。此答案是正确的。ModelState问题是一个bug。不管这是不是出于设计,它都让我烦透了我没有这样做的原因是因为我有一个单元测试,它断言Create操作将默认值放入模型中。RedirectToRouteResult不包含模型,因此我很难进行测试。这不是很好的理由。您应该在TourManager.CreateTour测试中检查这些默认值,而不是此操作测试。此答案是正确的。ModelState问题是一个bug。不管这是不是出于设计,它都让我烦透了