MVC3 Форма Отправленное значение - PullRequest
3 голосов
/ 23 февраля 2012

Ниже сценария, я думаю, что я должен видеть текст START в моей форме при первой загрузке.Когда я нажимал кнопку отправки данных и отправлял, я ждал, чтобы увидеть текст FINISH в моей форме.

Купить текст START никогда не меняется, когда я нажимаю кнопку и отправляю форму ...

Кто-нибудь может подсказать проблему?

МОЙ КОНТРОЛЛЕР:

namespace MvcApplication1.Controllers
{
    public class BuyController : Controller
    {
        public ActionResult Index(BuyModel model)
        {
            if (Request.HttpMethod == "GET")
            {
                model.Message= "START";
                return View(model);
            }
            else
            {
                BuyModel newModel = new BuyModel();
                newModel.Message= "FINISH";
                    return View(newModel);
            }
        }
    }
}

МОЙ ВИД:

@model MvcApplication1.Models.BuyModel
@using (Html.BeginForm("Index", "Buy", FormMethod.Post))
 {
        @Html.TextBoxFor(s => s.Message)
    <button type="submit" >Send</button>
 }              

МОЯ МОДЕЛЬ:

public class BuyModel
{
    public string Message { get; set; }
}

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012
            public class BuyController : Controller
            {
                public ActionResult Index()
                {
                    BuyModel model = new BuyModel();
                    model.Message= "START";
                    return View(model);
                }

                [HttpPost]
                public ActionResult Index(BuyModel model)
                {
                    model = new BuyModel();
                    model.Message= "FINISH";

                    ModelState.Clear();  // the fix

                    return View(model);
                }
            }

Просмотр:

@model MvcApplication1.Models.BuyModel
@using (Html.BeginForm("Index", "Buy"))
 {
        @Html.TextBoxFor(s => s.Message)
    <button type="submit" >Send</button>
 }   

Ваша проблема в том, что исходный код, этот метод действия, будет выполняться только как HTTP-запрос GET.ASP.NET MVC позволяет вам указать сообщение с атрибутом [HttpPost] ( см. Код выше ).

Я не уверен, что вы получаете с вашим желаемым поведением POST,Кажется, что вы просто стираете все значения форм, помещенные в POST.Поэтому измените мой приведенный выше код соответствующим образом, но он должен дать вам общее представление.

Edit : похоже, что текстовое поле сохраняет свое значение после POST.Это не только с "START", но если вы введете что-либо в это текстовое поле и нажмете «Отправить», у вас будет POST с тем же текстом в текстовом поле, который был при отправке формы.

Редактировать Редактировать : см. Измененный код.Вызовите ModelState.Clear() в вашем методе действия POST, и вы получите правильное значение.

1 голос
/ 24 февраля 2012

Если вы публикуете, а не возвращаете RedirectResult, по умолчанию помощники будут использовать значение из ModelState.Вам нужно либо очистить ModelState, либо использовать другой подход.

Шаблон PRG (получение после перенаправления) в MVC очень важен.Так что если это сообщение, а вы не перенаправляете, помощники предполагают, что существует ошибка, которую необходимо исправить, и значение извлекается из ModelState.

...