多分私は何か不足しているかもしれませんが、同じアクションにポストバックするフォームがあると、テキストボックスの値は古い値に戻ります。次の例では、各POSTのテキストボックスの値をインクリメントする必要があります。これは起こらず、モデルの値がインクリメントされ、モデルは有効です。Modelstateはポストバック時に有効ですが、Textboxは古い値に戻ります
ただし、HttpPostアクション(コード内のコメント)でモデルステートをクリアすると、すべて正常に動作します。
何か不足していますか?ここで
はコードです:
モデル:
public class MyModel
{
public int MyData { get; set; }
}
ビュー:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.MyModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<%: Html.TextBoxFor(m => m.MyData)%> (<%: Model.MyData%>)
<%: Html.ValidationMessageFor(m => m.MyData) %> <br />
State :<%: ViewData["State"] %> <br />
<input type="submit" />
<% } %>
</asp:Content>
コントローラー:
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new MyModel { MyData = 0 });
}
[HttpPost]
public ActionResult Index(MyModel myModel)
{
// ModelState.Clear();
ViewData["State"] = "invalid";
if (ModelState.IsValid)
ViewData["State"] = "Valid";
var model = new MyModel { MyData = myModel.MyData + 1 };
return View(model);
}
}
ありがとうございました。私はModelStateをクリアすることがうまくいくことを知っていました。なぜなら、それが有効なモデルのために行われなければならない理由は分かりませんでした。最初のリンクには、Brad Wilsonのコメントがあります。これは設計上のものであり、モデルは有効かどうかにかかわらず、ModelStateを常に使用します。もう一度表示(使用可能なModelStateを使用するため)。 –
多くの感謝!私も助けてくれました..素晴らしい作品.. – Aaron
モデルの状態をクリアしないでください - http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc- s-html-helpers-render-the-wrong-value.aspx –