Wie gehen ausgewählte Element-id aus der dropdown-Liste, um controller-action?

Allgemeine problem überblick: ich habe eine erstellen\Bearbeiten-Ansicht für ein zusammengesetztes Element, wo ich wählen Sie eine Menge von Optionen für Komponenten aus der drop-down-Listen. Ich möchte in der Lage sein, um hinzuzufügen oder zu Bearbeiten eine bestimmte Komponente, ausgewählt in einer dropdown-Liste.

Hier ist ein kurzes, aber vollständiges Beispiel:

Angenommen ich habe eine Car Modell

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }

    public BodyStyle BodyStyle { get; set; }
    public int BodyStyleId { get; set; }
}

BodyStyle ist eine Komponente einer Car Aggregat, definiert als:

public class BodyStyle
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Nun habe ich eine controller-Aktion, um ein Auto zu schaffen,

public ActionResult CreateCar()
{
    //BodyStyles is a mock property with all hardcoded BodyStyles, just for demo
    ViewBag.Styles = new SelectList(BodyStyles, "Id", "Name");
    return View();
}

Ist hier der Teil, der CreateCar anzeigen, die definiert BodyStyle dropdown-Liste.

<div class="form-group">
    @Html.LabelFor(model => model.BodyStyle, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.BodyStyleId, (IEnumerable<SelectListItem>)ViewBag.Styles)
        @Html.ActionLink("Create", "CreateBodyStyle")

        @*here is the problem, can't find a way to pass selected BodyStyle Id to EditBodyStyle action*@
        @Html.ActionLink("Edit", "EditBodyStyle") 
    </div>
</div>

Hier ist die naive Implementierung der EditBodyStyle

public ActionResult EditBodyStyle(int bodyStyleId)
{
    return View(BodyStyles.First(b => b.Id == bodyStyleId));
}

Gibt es eine Möglichkeit zu sagen ASP.NET MVC zum übergeben der ausgewählten BodyStyle-Id aus DropDownListFor zu EditBodyStyle Aktion?

Ich habe dies erreicht mit javascript, abonnieren onchange und speichern Sie den ausgewählten Wert, dann verwenden Sie es in dem link. Aber der code wird zu einem Durcheinander, da ich in der Nähe von 10 solcher Komponenten auf mehrere Ansichten. Die Funktionalität ist ganz einfach, so Frage ich mich, wenn ich bin fehlen einige ASP.NET MVC-Funktion, das wird mir helfen, erreichen dies nur mit Razor view engine.

Hier ist die resultierende Ansicht, nur, um das ganze Bild zu:

Wie gehen ausgewählte Element-id aus der dropdown-Liste, um controller-action?

Wobei jede option der select tag von format:

<option value="1">Coupe - 2 door</option>
<option value="2">Coupe - 3 door</option>

Aktuellen Implementierung (es gibt keine id ' s in der Ansicht oben genannten Beispiel aber davon ausgehen, dropdown-Liste und link-ids, wie bereits in der js):

$(function () {
    $("#editBodyStyleLink").click(function () {
        var id = $("#bodyStylesDropDown").val();
        window.location.href = "/Home/EditBodyStyle/?id=" + id;
    });
});
vielleicht werfen Sie einen Blick auf diese: codeproject.com/Questions/593787/...
Ich habe festgestellt über die erste, ich bin mit es jetzt und es ist, naja, ok. Ich bin nicht gegen das schreiben JS, aber Frage mich, ob dies getan werden kann, ohne dass es. Lösung 2 hat onchange = "submit();" was bedeutet, dass eine Aktion um alle änderungen in Drop-down Listen, es ist nicht wünschenswert, da will ich bis zum Versand Bearbeiten von Aktionen auf view-Ebene, nicht auf controller-Ebene.
Ohne javascript? Warum gehst du nicht post-Formular zu EditBodyStyle? Ist es muss, um zu verwenden ActionLink hier?

InformationsquelleAutor Ilya Ivanov | 2013-11-29

Schreibe einen Kommentar