ajax - 如何从 MVC ViewModel 获取输入数据到 ajax post
问题描述
我正在将 SQL 数据库表中的数据提取到 ASP.NET MVC Razor 视图中,但是我无法将更改的输入数据输入到 Ajax 帖子中,例如:
@model MyViewModel
<div class="row">
<div class="col-1">
@Html.LabelFor(model => model.Id, "Id:", new {})
</div>
<div class="col-4">
@Html.Label(Model.Id.ToString(), new { title = "" })
</div>
</div>
<div class="row">
<div class="col-1">
@Html.LabelFor(model => model.Test, "Test:", new { })
</div>
<div class="col-9">
@Html.TextBoxFor(model => model.Test, new { data_bind = "value: Test", @type = "text" })
</div>
</div>
@section scripts {
<script type="text/javascript">
$("#save-click").click(function () {
var nr = @Model.Id;
var postData = @Html.Raw(Json.Encode(@Model));
//alert(postData.Test);
$.ajax({
type: "POST",
url: actions.test.createOrUpdate + "?id=" + nr,
dataType: "json",
traditional: true,
data: postData,
success: function (response) {
if (response.Code == 0) {
else {
window.location.reload(false);
}
} else {
alert('err');
}
}
});
});
});
</script>
}
当我加载视图时,一切都正确显示。控制器动作被正确触发,并且 Id(不能更改)也被正确传递。但是,当输入字段更改时,更改的值不会传递给控制器,而是获取到视图中的原始值。
序列化似乎有效,因为警报 ( postData.Test
) 返回一个值 - 但始终是未更改的值。
任何帮助,将不胜感激。
解决方案
var postData = @Html.Raw(Json.Encode(@Model));
这条线是罪魁祸首。当 Razor 渲染脚本时,它会将原始/未更改的模型分配给您的postData
变量。
如果您使用“检查元素”或开发工具来检查 的值postData
,您会发现这些值不会更改,因为它们是静态分配的。
每次单击按钮时,您都需要检查新值,方法是使用
var postData = $("form").serialize();
并确保将您的输入字段包装在表单标签内。请参见下面的代码:
<form>
<div class="row">
<div class="col-1">
@Html.LabelFor(model => model.Id, "Id:", new {})
</div>
<div class="col-4">
@Html.Label(Model.Id.ToString(), new { title = "" })
</div>
</div>
<div class="row">
<div class="col-1">
@Html.LabelFor(model => model.Test, "Test:", new { })
</div>
<div class="col-9">
@Html.TextBoxFor(model => model.Test, new { data_bind = "value: Test", @type = "text" })
</div>
</div>
</form>
@section scripts {
<script type="text/javascript">
$("#save-click").click(function () {
var nr = @Model.Id;
// use form.serialize or use the id/class of your form
var postData = $("form").serialize();
$.ajax({
type: "POST",
url: actions.test.createOrUpdate + "?id=" + nr,
dataType: "json",
traditional: true,
data: postData,
success: function (response) {
if (response.Code == 0) {
else {
window.location.reload(false);
}
} else {
alert('err');
}
}
});
});
});
</script>
}
推荐阅读
- php - 注意:尝试访问第 15 行 H:\xampp\htdocs\ecommerce\app\libraries\Core.php 中 null 类型值的数组偏移量
- flutter - Flutter initState 未被调用
- javascript - JS:获取对角线行和列的嵌套循环?
- c# - LINQ:防止创建新对象,(如果对象存在,则附加到列表属性)
- gcc - 加载我的内核时,GRUB2 产生“找不到多引导头”错误
- java - 我有一个集合“客户”,其中我有一个集合“环境”的列表我想更新特定索引处的列表
- docker - 如何修复docker在启动时崩溃
- compiler-errors - Bluej 中的 Char 不能被取消引用错误
- php - 此页面无法正常工作 - 错误 501 Codeigniter
- python - 如何为 3D 计算器模型制作 GUI(python、c#、c++)?