提交时TextBox值变为空白

时间:2012-10-18 17:39:20

标签: asp.net-mvc asp.net-mvc-3

我通过选择(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 ...

这种行为的原因是什么?

2 个答案:

答案 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);
}