Передайте модель для просмотра, затем снова передайте ее из представления в контроллер - PullRequest
0 голосов
/ 01 февраля 2012

Я довольно новичок в asp.net mvc и у меня есть вопрос. Пример модели:

public class FooModel
{
 public string StrA {get; set;}
 public string StrB {get; set;}
}

Как я могу сделать что-то вроде этого: передать модель для просмотра (модель с заполненным StrA, пустой StrB), обновить StrB моей модели (заполненный StrA, заполненный StrB), а затем отправить его в мое действие с заполненными как StrA, так и StrB (по умолчанию я пропущу новый экземпляр модели с заполненным только StrB, и мое предыдущее значение StrA исчезнет).

Я знаю, что могу использовать HiddenFor, но есть ли другой способ сделать это?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Я знаю, что могу использовать HiddenFor, но есть ли другой способ сделать это?

В своем действии POST вы можете получить значение свойства StrA из того жеПоместите его в действие GET.Таким образом, вам не нужно использовать скрытое поле, чтобы сохранить его.

Например:

public ActionResult Index()
{
    var model = new FooModel
    {
        StrA = PopulateStrAFromSomewhere()
    };
    return View(model);
}

[HttpPost]
public ActionResult Index(string strB)
{
    var model = new FooModel
    {
        StrA = PopulateStrAFromSomewhere(),
        StrB = strB
    }

    ... do something with the model
}

Теперь в представлении вы можете иметь только поле ввода для StrB внутриформа, которая позволит пользователю изменять его значение:

@model FooModel
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.StrB)
    @Html.EditorFor(x => x.StrB)
    <button type="submit">OK</button>
} 
0 голосов
/ 01 февраля 2012

Вы можете создать свой собственный POST, используя, например, jQuery AJAX (http://api.jquery.com/jQuery.post/) или создать форму вручную и отправить ее (http://api.jquery.com/submit/).Это означает, что вам не нужно создавать видимую форму на странице (если вы этого хотите избежать).

Однако вам нужно будет передать данные в DOM и сохранить их каким-либо образом (например со скрытым полем).Поскольку HTML не имеет состояния, вы не можете волшебным образом сохранить StrA где-нибудь, если вы действительно хотите каким-то образом вернуть его на сервер - если только он не предназначен для переключения между запросами, а это значит, что вам не нужно передавать его клиенту и обратно.любым способом (см. ответ Дарина для примера того, как обращаться с этим в этом случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...