1

(ASP.Net MVC 2 Web アプリケーション) を選択して、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();
}

質問

以下のようにIndexコントローラーを保持すると。送信ボタンをクリックした場合。これは TextBox コントロールをクリアしています。以下のように

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

Action メソッドに Model を Parameter として組み込む場合、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 に答える