10 Stimmen

UpdateModel-Präfix - ASP.NET MVC

Ich habe Probleme mit TryUpdateModel() . Meine Formularfelder sind mit einem Präfix benannt, aber ich verwende - als Trennzeichen und nicht den Standardpunkt.

<input type="text" id="Record-Title" name="Record-Title" />

Wenn ich versuche, das Modell zu aktualisieren, wird es nicht aktualisiert. Wenn ich das Attribut name in Record.Title Es funktioniert perfekt, aber das ist nicht das, was ich tun möchte.

bool success = TryUpdateModel(record, "Record");

Ist es möglich, ein benutzerdefiniertes Trennzeichen zu verwenden?

10voto

Todd Smith Punkte 16604

Zu beachten ist auch, dass das Präfix der Reflexion helfen soll, das/die richtige(n) Feld(er) für die Aktualisierung zu finden. Wenn ich zum Beispiel eine benutzerdefinierte Klasse für meine ViewData habe, wie z.B.:

public class Customer
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

public class MyCustomViewData
{
    public Customer Customer {get; set;}
    public Address Address {get; set;}
    public string Comment {get; set;}
}

und ich habe ein Textfeld auf meiner Seite

<%= Html.TextBox("FirstName", ViewData.Model.Customer.FirstName) %>

oder

<%= Html.TextBox("Customer.FirstName", ViewData.Model.Customer.FirstName) %>

So funktioniert's

public ActionResult Save (Formcollection form)
{
    MyCustomViewData model = GetModel(); // get our model data

    TryUpdateModel(model, form); // works for name="Customer.FirstName" only
    TryUpdateModel(model.Customer, form) // works for name="FirstName" only
    TryUpdateModel(model.Customer, "Customer", form); // works for name="Customer.FirstName" only
    TryUpdateModel(model, "Customer", form) // do not work

    ..snip..
}

0 Stimmen

Sie können einfach das zweite Beispiel zu: <%= Html.TextBox("Customer.FirstName") %>

3voto

tvanfosson Punkte 506878

Es sei denn, Sie implementieren Ihren eigenen ModelBinder. Wenn Sie sich den Quellcode für den DefaultModelBinder auf www.codeplex.com/aspnet sehen Sie, dass bei Angabe eines Präfixes der Name durch Verkettung des Präfixes, eines Punktes und des Eigenschaftsnamens konstruiert wird. Leider ist die Methode von DefaultModelBinder, die dies tut, privat und statisch und kann daher nicht in einer abgeleiteten Klasse überschrieben werden.

0voto

Steve Punkte 369

Das war eine schlechte Entscheidung, um es zu benutzen. Ein Unterstrich wäre besser gewesen.

Das bedeutet, dass Sie alle Ihre IDs separat definieren müssen.

dh. Textbox hat jetzt Html.TextBox("test.test", new{@id="test")

-2voto

exiang Punkte 548

Es gibt einen Grund, nicht . als ID/Name in HTML zu verwenden, da dies nicht dem Standard entspricht. Zum Beispiel bricht es ab, wenn ein Punkt im Ziel vorkommt.

0 Stimmen

Unterstriche werden für die HTML/CSS-IDs verwendet. Der Punkt wird nur für die Namen von Formulareingaben verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X