/ / Eine Ansicht mit ausgefüllten Feldern zurückgeben? - asp.net-mvc, asp.net-mvc-3

Eine Ansicht mit ausgefüllten Feldern zurückgeben? - asp.net-mvc, asp.net-mvc-3

Ich übergebe eine Abfragezeichenfolge an mein KontoController von einer externen Quelle und ich möchte diese Werte zum Modell hinzufügen und die Ansicht zurückgeben. Der folgende Code funktioniert, aber er gibt die Ansicht mit allen Validierungsfehlern für die fehlenden Felder zurück. Ich möchte einfach die Ansicht zurückgeben, wenn diese Felder ausgefüllt sind.

Ein anderes Problem ist, dass ich eine saubere URL wie / Account / Register ohne den Abfrage-String am Ende der Adresse zurückgeben möchte.

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

Antworten:

2 für die Antwort № 1

Ich denke, dass Sie sich vielleicht so schlecht nähern.

Wenn Sie eine Abfragezeichenfolge zum Auffüllen Ihrer Ansicht verwenden, führen Sie stattdessen Folgendes aus:

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

Wenn Sie nach einer sauberen URL suchen, sollten Sie stattdessen einen POST verwenden. Das heißt, Sie erstellen ein Formular und senden es über eine Schaltfläche zum Abschicken. In diesem Fall würden Sie Folgendes tun:

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

Ich denke, Ihr ursprünglicher Code bestand aus beiden Ansätzen.


1 für die Antwort № 2

Um die saubere URL zurückzugeben, müssen Sie die Route zuordnen. Fügen Sie in Ihrer Global.asax oben in der Liste Folgendes ein RegisterRoutes:

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

Dann /Account/WriteRegistration/251911083837045755/All/False Wird zusammenpassen.

Um die Werte in die Ansicht zu übernehmen, übergeben Sie sie über die Viewdata und setzen Sie die Standardwerte der Formularfelder auf die Werte in den Viewdata.


-1 für die Antwort № 3

Ich glaube, Sie können ModelState.Clear () aufrufen, um alle von ModelBinding generierten Fehler zu löschen. Dadurch sollten die Überprüfungsfehler beim ersten Laden der Seite beseitigt werden.