ASP.NET MVC ModelBinder -Fehler: Bindungsanforderungsvariable "ID" zur Modelleigenschaft "ID" des Modells

StackOverflow https://stackoverflow.com/questions/5358913

Frage

Ich verwende MVC 3 Final RTM.

Gegeben

Diese Route:

context.MapRoute(
    "Blog_Posts",
    "Blog/Posts/{id}/{slug}",
    new { controller = "Posts", action = "Index", slug = UrlParameter.Optional }
);

Und auf der Seite eines Beitrags, zB/blog/posts/2/slug-slug ich bin eine teilweise Ansicht mit a Comment Modell:

@Html.Partial("_CommentEditor", new Comment())

Und Comment hat ein public int Id {get; set;}.

Und in der Teilansicht habe ich Folgendes:

@Html.HiddenFor(comment => comment.Id)

Warum zeigt es das an?

<input type="hidden" value="2" name="Id" id="Id" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true">

Und warum, wenn ich mich verändere Id an Comment zu CommentId Hat es richtig einen Wert von? 0?

Ich denke, der Standardmodellbinder ist bindend an die {id} der Route.

War es hilfreich?

Lösung

Dies geschieht, denn wenn Sie HTML -Helfer wie Hidden verwenden, um zuerst Routendaten und Modellzustand und danach im Modell zu betrachten. Sie finden also in Ihren Routendaten eine Parameter -ID = 2 und verwenden diesen Wert anstelle der ID = 0 im Modell, das Sie übergeben.

Andere Tipps

Es ist ein Fehler oder möglicherweise nicht aufgrund der unten implementierten Logik.

In ASP.NET MVC verwendet eine View Engine Daten anzeigen (Es ist variabel und sein Typ ist "viewDatadictionary"). Und das Daten anzeigen Hat 2 Eigenschaften "Modellstate", die Routingwerte und "Modell" besitzt, die unser tatsächliches Modellobjekt hält.

  1. Eine View -Engine untersucht den Wert "modelState" -Objektabrufwert einer Eigenschaft.
  2. Wenn in Schritt 1 gefunden, geben Sie den Wert zurück.
  3. Andernfalls untersucht das "Modell" -Objekt, um den Wert für eine Eigenschaft abzurufen.

Im obigen Fall wird die Route Eigenschaft "ID" und ihr Wert werden in "ModelState" gespeichert, sodass sie den Wert von "ModelState" anstelle von gebundenem Modell zurückgibt.

Für das obige Szenario verleiht jeder Eingabesteuerung einen unerwarteten Wert.

Auflösung ist:

<div class="postData" value='@Model.Id'/>

//use below jquery function to retrieve data
var postedData = $('.postData');

Wenn Sie LINQ zu SQL verwenden, können Felder, die von der Datenbank bereitgestellt werden, nicht manuell festgelegt werden.

Versuchen:

Try @Html.Partial("_CommentEditor", new Comment{Id = 0}) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top