xra*_*inx 29 c# forms asp.net-mvc
此时我希望文本区域为空,因为我已将ViewData ["SomeText"]设置为string.Empty
为什么在发布操作后文本区域值不会更新为空字符串?
以下是行动:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Message(int ID)
{
ViewData["ID"] = ID;
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Message(int ID, string SomeText)
{
// save Text to database
SaveToDB(ID, SomeText);
// set the value of SomeText to empty and return to view
ViewData["SomeText"] = string.Empty;
return View();
}
Run Code Online (Sandbox Code Playgroud)
和相应的观点:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm())
{ %>
<%= Html.Hidden("ID", ViewData["ID"])%>
<label for="SomeText">SomeText:</label>
<%= Html.TextArea("SomeText", ViewData["SomeText"]) %>
<input type="submit" value="Save" />
<% } %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
Oli*_*yen 69
问题是您的ModelState重新填充了已发布的值.
您可以做的是在具有Post属性的Action上清除它:
ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)
ror*_*ryf 40
问题是HtmlHelper正在检索ModelState值,该值填充了发布的数据.不是通过重置ModelState来破坏它,为什么不重定向回[get]动作.[post]动作也可以设置这样的临时状态消息:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Message(int ID, string SomeText)
{
// save Text to database
SaveToDB(ID, SomeText);
TempData["message"] = "Message sent";
return RedirectToAction("Message");
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这似乎更正确的行为.
html帮助器从ModelState读取值.而且没有优雅的方法来覆盖这种行为.
但如果你之后添加这一行SaveToDB(ID, SomeText),它应该工作:
ModelState["SomeText"].Value =
new ValueProviderResult("", "", CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)