Вернуть представление с заполненными полями? - PullRequest
0 голосов
/ 22 августа 2011

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

Еще одна проблема заключается в том, что я хотел бы вернуть чистый URL-адрес, такой как / Account / Register без строки запроса в конце адреса?

// **************************************
// URL: /Account/WriteRegistration/?Number=251911083837045755&Name=All&Remote=False
// **************************************

    public ActionResult WriteRegistration(RegisterModel model, string Number, string Name, bool Remote)
    {
        model.Number = Number;

        return View("Register", model);
    }

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

Думаю, вы к этому плохо подходите.

Если вы используете строку запроса для заполнения своего представления, сделайте это вместо:

public ActionResult WriteRegistration(string Number, string Name, bool Remote)
{
    // Instantiate a new model here, then populate it with the incoming values...
    RegisterModel model = new RegisterModel() { Number = Number, Name = Name, Remote = Remote };
    return View("Register", model);
}

Если вы ищете чистый URL-адрес, вы можете рассмотреть возможность использования вместо него POST ... то есть создания формы и отправки с помощью кнопки отправки. В этом случае вы бы сделали это:

[HttpPost]
public ActionResult WriteRegistration(RegisterModel model)
{
    // Model binding takes care of this for you, no need to set it up yourself.
    // ...but I'm guessing you'd do some logic here first.
    return View("Register", model);
}

Я думаю, ваш исходный код совмещал оба подхода.

1 голос
/ 22 августа 2011

Чтобы вернуть чистый URL, вам нужно отобразить маршрут, в вашем Global.asax добавьте следующее в верхней части RegisterRoutes:

routes.MapRoute(
    "WriteRegistration",
    "Account/WriteRegistration/{Number}/{Name}/{Remote}",
    new {controller="Account", action="WriteResistration"},
    new {productId = @"\d+" }
);

Тогда /Account/WriteRegistration/251911083837045755/All/False будет соответствовать.

Чтобы получить значения в представлении, передайте их через viewdata и установите значения полей формы по умолчанию для значений в viewdata.

0 голосов
/ 22 августа 2011

Я полагаю, что вы можете вызвать ModelState.Clear (), чтобы очистить все ошибки, сгенерированные ModelBinding.Это должно избавить от ошибок проверки при первой загрузке этой страницы.

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