/ / Zwrócić widok z wypełnionymi polami? - asp.net-mvc, asp.net-mvc-3

Zwrócić widok z wypełnionymi polami? - asp.net-mvc, asp.net-mvc-3

Przesyłam ciąg zapytania do mojego kontakontroler z zewnętrznego źródła i chciałbym dodać te wartości do modelu i zwrócić widok. Poniższy kod działa, ale zwraca widok z wszystkimi błędami sprawdzania poprawności brakujących pól. Chciałbym po prostu zwrócić widok z wypełnionymi polami?

Innym problemem jest to, że chciałbym zwrócić czysty adres URL taki jak / Konto / Zarejestruj się bez ciągu zapytania na końcu adresu?

// **************************************
// 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);
}

Odpowiedzi:

2 dla odpowiedzi № 1

Myślę, że podchodzisz do tego źle.

Jeśli używasz ciągu zapytania do wypełnienia widoku, zrób to zamiast tego:

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

Jeśli szukasz czystego adresu URL, możesz zamiast tego rozważyć użycie testu POST ... czyli utworzenie formularza i przesłanie go za pomocą przycisku przesyłania. W takim przypadku wykonaj następujące czynności:

[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);
}

Myślę, że twój oryginalny kod łączył oba podejścia.


1 dla odpowiedzi nr 2

Aby zwrócić czysty adres URL, musisz zmapować trasę, w Global.asax dodaj następujące na górze RegisterRoutes:

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

Następnie /Account/WriteRegistration/251911083837045755/All/False pasuje.

Aby wprowadzić wartości do widoku, przekaż je za pośrednictwem viewdata i ustaw wartości domyślne pól formularza na wartości w viewdata.


-1 dla odpowiedzi nr 3

Wierzę, że możesz wywołać ModelState.Clear (), aby usunąć wszelkie błędy generowane przez ModelBinding. To powinno pozbyć się błędów sprawdzania poprawności podczas pierwszego ładowania tej strony.