Как обновить значение текстового поля - PullRequest
1 голос
/ 27 мая 2010

У меня есть текстовое поле в моем представлении.Я ввожу число в текстовое поле, а затем хочу, чтобы контроллер умножил число и поместил результат в текстовое поле.

Как я могу это сделать?

Это то, что я сделалуже.Давайте начнем с просмотра:

<%@ 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);
        }
    }
}

Но на самом деле ничегослучается.Да, я вижу, что Почта готовится, и закодированные шаги в public ActionResult Index(int number).Я вижу, что число взято из текстового поля, оно умножено правильно.

Я пытался использовать ViewData, как вы можете видеть.Я также использовал TempData.Это еще один код для текстового поля в представлении, которое я пробовал:

<%=Html.TextBox("number", ViewData["number"])%>

Но это не имеет значения.Текстовое поле не обновляется с новым значением.Как я могу это сделать?

1 Ответ

4 голосов
/ 27 мая 2010

Попробуйте

    [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 кусает вас. Он ищет данные в коллекции ModelState, прежде чем использовать то, что находится в ViewData. Обычным аргументом является POST> Validation Fail> Return View, поэтому показ данных, введенных пользователем, является предполагаемым поведением.

...