1

我通过选择(ASP.Net MVC 2 Web Application)在 MVC2 中创建了一个应用程序。这提供了一些主页/关于控制器/模型/视图。

我还创建了一个具有索引名称的模型,如下所示...

namespace MvcApplication1.Models
{
    public class Index
    {
        [DataType(DataType.Text)]
        public String Name { get; set; }
    }
}

以下是我的索引视图

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using (Html.BeginForm()) 
        {%>
    <%:Html.TextBoxFor(x=> x.Name) %>
    <input type="submit" name="Click here" />
    <%} %>
</asp:Content>

以下是我的控制器

[HttpPost]
public ActionResult Index(Index Model)
{
      ViewData["Message"] = "Welcome to ASP.NET MVC!";
      return View();
}

问题

当我保持索引控制器如下所示。如果我点击提交按钮。这是清除 TextBox 控件。像下面

    public ActionResult Index()
    {
          ViewData["Message"] = "Welcome to ASP.NET MVC!";
          return View();
    }

如果将模型作为参数合并到 Action 方法中,则不会清除 TextBox...

这种行为的原因是什么?

4

2 回答 2

1

MVC 不像 WebForms 那样维护回发之间的状态。

字段是从 ModelState 中的值重新填充的,这些值只有在模型绑定器在回发时看到它们时才会添加到那里(并且可能只有在存在验证错误的情况下?)。老实说,如果它不自动执行,我几乎会更喜欢。然而,如果你回发一个无效值(例如一个字符串到一个整数字段),你需要一个可以存储无效值的地方,以便它可以与验证错误一起重新填充。

除了该自动方法之外,您需要手动将模型传递回视图以进行填充

[HttpPost]
public ActionResult Index(Index Model)
{
  ViewData["Message"] = "Welcome to ASP.NET MVC!";
  return View(Model);
}
于 2012-10-18T17:51:01.200 回答
1

您的控制器应该看起来像这样,以便用户输入在单击提交按钮后保留在视图中'

public ActionResult Index( )
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";
    var model = new Index();
    return View( model );
}

[HttpPost]
public ActionResult Index(Index model )
{

    return View(model);
}
于 2012-10-18T18:19:16.710 回答