我通过选择(ASP.Net MVC 2 Web应用程序)在MVC2中创建了一个应用程序。这提供了一些Home / About Controllers / Models / Views。
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 COntrols。如下所示
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
在将Action模型作为参数合并到Action方法中时,不会清除TextBox ...
这种行为的原因是什么?
答案 0 :(得分:1)
MVC不像WebForms那样在回发之间保持状态。
字段是从ModelState中的值重新填充的,如果模型绑定器在回发时看到这些值,那么它们只会被添加到那里(并且可能只有在存在验证错误的情况下?)。老实说,如果没有自动完成,我几乎会更喜欢。但是,如果您回发无效值(例如,字符串到整数字段),您需要一个可以存储无效值的地方,以便可以重新填充验证错误。
除了自动方法之外,您需要手动将模型传递回视图以便填充
[HttpPost]
public ActionResult Index(Index Model)
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View(Model);
}
答案 1 :(得分: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);
}