Meine selectedActiveRoles und selectedInactiveRoles kommen nicht durch den Controller als Teil meines Ansichtsmodells beim Senden über Ajax und ich habe nichts gefunden, das dies spezifisch angeht. Es funktionierte gut, als ich gerade das Formular posten wollte.ASP.NET MVC AJAX Formular Absenden verlieren ListBoxFor/MultiSelectList bei senden/post Aktion
Meine Form:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "editForm", @class = "form-horizontal" }))
{
<div class="row">
<div id="dualListBoxContainer">
<div class="form-group">
<label class="col-xs-2 control-label">Available Roles:</label>
<div class="col-xs-8 input-group">
@Html.ListBoxFor(model => model.SelectedInactiveRoles, new MultiSelectList(Model.InactiveRoles, "RoleId", "Description", @Model.SelectedInactiveRoles), new { @class = "form-control", name = "inactiveRoles", multiple = "multiple", size = 5 })
</div>
</div>
<div class="form-group">
<div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 text-center">
<button type="button" class="btn btn-sm btn-primary" id="addRole"> <i class="fa fa-arrow-down"></i> Add </button>
<button type="button" class="btn btn-sm btn-primary" id="removeRole"> Remove <i class="fa fa-arrow-up"></i> </button>
</div>
</div>
<div class="form-group">
<label class="col-xs-2 control-label">Active Roles:</label>
<div class="col-xs-8 input-group">
@Html.ListBoxFor(model => model.SelectedActiveRoles, new MultiSelectList(Model.ActiveRoles, "RoleId", "Description", @Model.SelectedActiveRoles), new { @class = "form-control", name = "activeRoles", multiple = "multiple", size = 5 })
</div>
</div>
<div class="form-group">
<div class="col-xs-8 col-xs-offset-2 text-right">
<button type="submit" class="btn btn-primary" id="saveChanges">Save Changes <i class="fa fa-save"></i></button>
</div>
</div>
</div>
</div>
}
Modell:
public class MyViewModel
{
public User User { get; set; }
public Client Client { get; set; }
public IEnumerable<Role> ActiveRoles { get; set; }
public IEnumerable<Role> InactiveRoles { get; set; }
public IList<int> SelectedActiveRoles { get; set; }
public IList<int> SelectedInactiveRoles { get; set; }
}
JS/JQuery:
$('#editForm')
.submit(function(e) {
e.preventDefault();
// modifies the 'selected' options on the list
// before finally being submitted by the browser
$('#SelectedInactiveRoles, #SelectedActiveRoles')
.prop('selected', true);
$.ajax({
url: $("#editForm").attr('action'),
type: 'post',
data: $(this).serialize(),
success: function() {
$("#modalContainer")
.fadeOut(500,
function() {
$("#modalContainer").empty();
});
}
});
});
Controller:
public ActionResult Edit([Bind] MyViewModel)
{
return null;
}
Danke für die gründliche Antwort. Ich glaube, dass das SelectList-Element von MultiSelectList abgeleitet ist. In diesem Zusammenhang scheint beides zu funktionieren. Nach dem Einbinden Ihrer Änderungen, glaube ich, das Problem wurde letztlich verursacht durch: '$ ('# SelectedInactiveRoles, #SelectedActiveRoles'). Prop ('ausgewählt', wahr);' Ich musste die Optionen innerhalb des Select-Elements auswählen : '$ ('# SelectedInactiveRoles Option, #SelectedActiveRoles Option'). Prop ('ausgewählt', true);' Um mehrere Werte mit der MultiSelectList oder SelectList zu übergeben, müssen Sie etwas ausgewählt haben, sonst kommt es als durch Null. – Switch386
Wählen Sie Ihre Antwort für die Gründlichkeit, und weil das Hinzufügen von 'var formData = $ (this) .serialize();' notwendig war. Vielen Dank! – Switch386
Hatten Sie auch ein anderes Javascript, in dem Sie versuchten, Optionen von einer Listbox in eine andere zu verschieben? (Wenn das der Fall war, dann sollten Sie darüber nachdenken, dies zu überdenken und statt dessen eine Checklisten-UI zu verwenden) –