Html-Code.Actionlink die übergabe von null-Werten controller
Ich habe diese Methode in meinem controller namens "DirectorySearchController"
public ActionResult PersonDetails(FoundPerson person) //for some reason person is null here
{
DirectoryViewModel viewModel = new DirectoryViewModel();
viewModel.person = person;
return View(viewModel);
}
Wenn ich einige Parameter übergeben, um es aus der Sicht der Verwendung von Html.Actionlink wird ein null-Wert
<ul data-role="listview">
@if (ViewBag.Message == "NO RESULTS FOUND")
{
<li>@ViewBag.Message</li>
}
else
{
foreach (var employee in Model)
{
<li>
<div class="ui-grid-b">
<div class="ui-block-a" style="width:20%; vertical-align:middle"><img src="@employee.pictureURL" width="40px" height="40px"/></div>
<div class="ui-block-b" style="width:80%; vertical-align:middle">@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", new { person = employee}, null)</div>
</div>
</li>
}
}
</ul>
Aber das lustige an der Sache ist, dass wenn ich übergeben Sie die parameter, ohne mit dem Schlüsselwort "new" geht es den richtigen Wert. Das problem ist jedoch, ich müssen mehrere Parameter übergeben, so muss ich verwenden Sie das Schlüsselwort "new".
<div class="ui-block-b" style="width:80%; vertical-align:middle">@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", employee, null)</div>
Ich habe genau das gleiche problem - wenn ich die Parameter der controller-Methode muss, beschwert es sich über einen null-Wert, aber wenn ich übergeben Sie das Objekt, das Sie magisch wählt das korrekte Objekt-Eigenschaft. Verrückt!
InformationsquelleAutor Un Known | 2012-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie verwenden nicht das korrekte überladung von ActionLink. Versuchen Sie, mit diesen
Die erste sollte vor allem die Arbeit nach Ihrem Fall:
Nur eine Empfehlung hier. Im Idealfall verwende ich eine Eingabe Einreichen, um die Daten zu veröffentlichen, um den Controller. Sie können entweder eine Model-Klasse ODER FormCollection in der controller-Seite zum abrufen der Werte, die Sie eingegeben in der Ansicht.
Hast du es funktioniert?
lol noch nicht....
InformationsquelleAutor CodeMad
Darf nicht passieren-Modell, um die controller-Aktion, wie
new { person = employee }
imHtml.ActionLink
. Was da passiert ist, beim erzeugen der Aktion verknüpfen Sie das Objekt, das übergeben wird umgewandelt inRouteValueDictionary
die verabschiedet werden, um dieUrlHelper
zum Anhängen der route Wörterbuch-Werte auf den link.Wenn Sie Durchlaufen ein anonymes Objekt wie im ersten Fall die
RouteValueDictionary
speichert einen einzelnen parameter mit dem Namenperson
und einen Wert festlegen, der es sieht, dass Sie bestanden haben, ein Objekt, es kann nicht serialisiert die komplette Instanz und legen Sie es auf die einzelne Eigenschaft, so dass alle es tut, ist, setzen Sie den Typ name des ModellsEmployee
als der Wert der person. So sehen Sie den generierten link als http://someserver/DirectorySearch/PersonDetails?person=Models.EmployeeWenn Sie übergeben eine Instanz, wie Sie es im zweiten Fall dann Durchlaufen Sie alle Eigenschaften und erstellen Sie Schlüssel/Wert-Paaren, während die Schlüssel sind die Namen der Eigenschaft und die Werte sind die Eigenschaftswerte, schließlich haben Sie alle an den link als Abfragezeichenfolgen. Im Fall der generierten url wird http://someserver/DirectorySearch/PersonDetails?Property1=Value1&Eigenschaft2=Wert2
Richtige
Falsch
Können Sie anonym Objekt übergeben Parameter der route zu dem Verweis auf die Aktion, aber zu der Zeit sollten Sie sich nicht über Referenz-Typen, aber built-in Typen wie integer, string,..
Ex.
Ich aktualisiert meine Antwort, plz-check.
Wenn Sie auf der Durchreise sind anonyme Objekt pasing Parameter als Schlüssel/Wert-Paare ähnlich wie Wörterbuch, so dass Sie sehen nur einen querystring-parameter mit dem Namen "person", aber wenn Sie übergeben eine Instanz, dann werden alle Ihre Eigenschaften umgewandelt werden, querystring paremeters und das ist, was erforderlich für das Modell verbindlich.
vielen Dank nochmal, leider klingen unwissend, aber was ist die übergabe mehrerer Referenz-Typen, zum Beispiel die Weitergabe von Mitarbeiter-und Model-in der original-code?
Ich dont zu verstehen, warum Sie wollen, übergeben Sie mehrere Referenz-Typen für die Aktion zu ERHALTEN in der Regel sollten Sie gehen für die POST. Aber immer noch können Sie durch die erste Möglichkeit, new { person1 = employee1, person2 = employee2 }.
InformationsquelleAutor VJAI