我尝试将我的模型转换为 javascript 对象,但属性为空,如果我切换到 MVC 标准提交,属性不为空。
Razor 代码
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })){@Html.TextBoxFor(model => model.Name, null, new { @class = "form-control", @id = "drpPipeline" })}
Javascript代码
$("#modalForm").on("submit", "#myForm", function(e) {
e.preventDefault(); // prevent standard form submission
debugger;
var associationPoolUi = @Html.Raw(Json.Encode(@Model));
});
最佳答案
这就是它的设计方式。
我们来谈谈:
- Razor
非常确定您有一个A
类。当您在 Controller 内调用操作方法时,您将返回一个具有 A 类型模型的 View 。
您根据A
类的外观创建一个表单。模型有什么值?可能所有属性都有一个默认值。这就是 GET HTTP 请求上发生的情况。
神奇的事情发生在 POST 上。如果您使用 Razor,您的操作方法可能会接受 A
类型的对象作为参数。 ASP.NET MVC 足够智能,可以查看您想要发送回 Controller 的所有属性并映射到类 A
中。
请记住,Razor 会转换为 HTML。这意味着当您单击“提交”按钮时,Razor 没有任何权力。
- Javascript
渲染页面后,您应该将所有内容视为 HTML。当您处理 submit
事件时,Razor 无法帮助您。用 HTML 术语思考,当您编写 @Html.Raw(Json.Encode(@Model))
时,您认为它会呈现什么?
请记住,您使用模型
仅用于创建将呈现给用户的表单(具有默认值)。您不应期望每次填写表单时都会更新 Model
属性(如某些前端框架)。我建议您尝试一下:只需在页面上按 CTRL+U 并查看该特定行。
关于javascript - 转换后的 razor 模型为 JS 对象属性为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569021/