如何更新文本框值

时间:2010-05-27 19:03:29

标签: asp.net-mvc html-helper

我的视图中有一个文本框。我在文本框中输入一个数字,然后我希望控制器将数字相乘并将结果放入文本框中。

我该怎么做?

这就是我已经做过的事情。 让我们从视图开始:

<%@ 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"])%>

但没关系。文本框不会使用新值进行更新。我怎么能这样做?

1 个答案:

答案 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;返回视图,因此显示用户输入的数据是预期的行为。