我的视图中有一个文本框。我在文本框中输入一个数字,然后我希望控制器将数字相乘并将结果放入文本框中。
我该怎么做?
这就是我已经做过的事情。 让我们从视图开始:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Index</title>
</head>
<body>
<div>
<h2>Please enter a number</h2>
<% using (Html.BeginForm()) { %>
<%=Html.TextBox("number")%>
<input type="submit" value="Index" name ="Index" />
<% } %>
</div>
</body>
</html>
正如您所看到的,我有一个简单的文本框和按钮。
这是我的控制者:
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(int number)
{
number = number * 2;
ViewData["number"] = number;
return View(ViewData);
}
}
}
但没有真正发生。是的,我看到Post正在完成,编码步骤进入public ActionResult Index(int number)
。我看到这个数字来自文本框,它正确地成倍增加。
我已经尝试过使用ViewData了。我也用过TempData。 这是我试过的View中文本框的另一个代码:
<%=Html.TextBox("number", ViewData["number"])%>
但没关系。文本框不会使用新值进行更新。我怎么能这样做?
答案 0 :(得分:4)
尝试
[HttpPost]
public ActionResult Index(int number)
{
number = number * 2;
ViewData["id"] = number;
ModelState.Clear(); // this is the key, you could also just clear ModelState for the id field
return View(ViewData);
}
您也可以使用常规html输入而不是HtmlHelper,您的代码将按预期工作。
Html助手的默认行为正在咬你。它在使用ViewData中的内容之前在ModelState集合中查找数据。推理是正常的情况是POST&gt;验证失败&gt;返回视图,因此显示用户输入的数据是预期的行为。