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:
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;
});
});
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst müssen Sie veröffentlichen Sie Ihre bodyStyleId als parameter (bitte beachten Sie, das ich verwendet habe Autos für Ihre controller-Namen, Sie benötigen, um das zu ändern, um die tatsächlichen controller-name):
Dann müssen Sie es beim Auffüllen Ihrer Liste wählen Sie die Elemente aus und senden Sie es zurück zu der Ansicht:
Ist der wichtige Teil, die erwischt mich aus, wenn dies zu tun, ist die folgende Zeile der Auswahl der Liste:
Und schließlich verwenden diese für Sie aus.
@Html.ActionLink("Edit", "EditBodyStyle")
wissen, welche id zu übergeben zum handeln?Der Benutzer wählt aus der dropdown-Liste auswählen, können wir nicht setzen es von der server-Seite. Diese Antwort ist ungültig.
Die Einreichung mit form ist die einzige Möglichkeit, die ich kenne. (ohne javascript)
Das Ergebnis wäre in 10 Formular auf einer Seite? Ich habe schon ein paar Komponenten
Sorry, ich neu angeordnet, meine Antwort, ein bisschen mehr Sinn machen.
InformationsquelleAutor hutchonoid
Schreiben Sie Ein javascript-framework, das wiederverwendet werden kann, wo jeder.
Sie haben, Javascript zu verwenden.
Können Sie Vorgehen wie diese.
Und ein Skript Schreiben,
InformationsquelleAutor Imran