2010-05-27 5 views
1

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

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

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

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

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

ответ

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

+0

ok Благодарим за ответ! – Thomas

Смежные вопросы