我在表单中有几个下拉列表。每次用户在其中一个下拉列表中选择一个值时,我是否希望将值保存到后端(数据库)。我不想重新加载页面,所以我想最好的方法是使用ajax,这就是我需要帮助的地方。
当我在下拉列表中选择一个值时,如何让它自动将值发布到服务器端。我应该为每个下拉列表创建一个表单,以便我可以单独更新它们吗?如何让它将值作为ajax调用发布,而不是重新加载页面?我在ASP MVC上使用JQuery和JQuery mobile。
为了演示目的,让我展示一些代码,就像现在一样: 视图模型:
public class ColorViewModel
{
public ColorViewModel()
{
Options = new List<string>(){ "red", "blue", "green" };
}
public string Value { get; set; }
public List<string> Options { get; set; }
}
查看:
@model IEnumerable<ColorViewModel>
@using (Html.BeginForm())
{
foreach(var item in Model)
{
Html.DropDownListFor(m => m.Value, Model.Options)
}
<input type="submit" value="Save">
}
我想从表单中删除提交按钮,并在用户选择一个值时执行表单的所有提交(我想这可以通过使用javascript来实现)
答案 0 :(得分:2)
默认情况下,MVC应为此字段呈现id="Value"
(您可以在辅助方法的HTML参数中覆盖它)。
然后使用jquery(如果你正在使用MVC项目模板,你已经应该在项目中使用它),你可以发布你的表单:
$(function() {
$('#Value').change(function() {
this.form.submit();
});
});
答案 1 :(得分:1)
Javascript是你最好的选择。像这样:
@using (Html.BeginForm("", "", FormMethod.Post, new { id = "myForm" }))
{
foreach(var item in Model)
{
Html.DropDownListFor(m => m.Value, Model.Options, new { id = "myList" })
}
}
<script type="text/javascript">
$(document).ready(function() {
$("#myList").change(function() {
$("#myForm").submit();
});
});
</script>
答案 2 :(得分:1)
我最后没有发布表单,但在更改时发布每个选择输入。我必须在发布的元素上使用“data-”属性附加我需要的所有值。例如,如果您想要附加ID:
@Html.DropDownListFor(m => m.Value, Model.Options, new { @data_Id = Model.Id, })
使用jQuery然后你就可以这样做:
$(function() {
$('.dropdown').change(function() {
$.ajax(
{
type: "POST",
url: "Controller/Action",
data: {
Value: $(this).val(),
Id: $(this).attr('data-Id'),
}
});
});
});
它现在将被发布到网址。如果您的对象具有与您在数据中发布的对象相同的属性名称,则会自动将正确的值填充到这些对象中。
另一个小小的说明。如果你想发布整个表单的其他方法(就像我先做的那样)你必须隐藏提交按钮,然后用javascript触发它的click事件,以便使用ajax。只需使用javascript正常提交表单即可正常提交表单,而不是使用ajax。