我目前正在尝试使用修改后的索引视图创建设置页面。目标是用户显示所有设置,并且可以在一个视图中更改所有设置并使用一个按钮保存所有设置。应使用 Ajax 更新该设置。
我目前的做法:
看法:
<script language="javascript">
$(function() {
$('#editSettings').submit(function () {
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result)
{
alert(result);
}
});
}
return false;
});
});
</script>
[ ... ]
@using (Ajax.BeginForm("Edit", "Settings", new AjaxOptions {UpdateTargetId = "result"}, new { @class = "form-horizontal", @id = "editSettings" } ))
{
foreach (Setting item in ViewBag.Settings)
{
@Html.Partial("_SingleSetting", item)
}
<input type="submit" value="modify" />
}
局部视图加载设置:
<div class="control-group">
<label class="control-label">@settingName</label>
<div class="controls">
@Html.EditorFor(model => model.Value)
<span class="help-inline">@settingDescription</span>
</div>
</div>
模型:
[Table("Settings")]
public class Setting
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SettingId { get; set; }
public string Name { get; set; }
[Required(AllowEmptyStrings = true)]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Value { get; set; }
}
我正在使用设置 ViewBagViewBag.Settings = _db.Settings.ToList();
jQuery 将数据解析为以下方法:
[HttpPost]
public ActionResult Edit(IList<Setting> setting)
{
Console.WriteLine(setting.Count);
return Content(""); // Currently for testing purposes only. Breakpoint is set to setting.Count
}
Count
抛出错误,因为设置是null
. 我很不确定如何解决这个问题。
有人可以给我一个提示吗?
这个关于 SO 的主题已经涵盖了在没有 Ajax 的情况下更新集合。但我不会明白这一点。
谢谢您的帮助。