将剃须刀模型转换为 JS 对象属性为空
Posted
技术标签:
【中文标题】将剃须刀模型转换为 JS 对象属性为空【英文标题】:Converted razor model to JS object properties are null 【发布时间】:2019-10-27 08:53:35 【问题描述】:我尝试将我的模型转换为 javascript 对象但属性为空,如果我切换到 MVC 标准提交,则属性不为空。
剃刀密码
@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));
);
【问题讨论】:
【参考方案1】:这就是它的设计方式。
让我们谈谈:
-
剃刀
更确定你有一个班级A
。当你在控制器中点击你的操作方法时,你会返回一个 View,它有一个 A 类型的模型。
您根据A
类的外观创建一个表单。模型有什么价值?可能所有属性都有一个默认值。这就是 GET HTTP 请求发生的情况。
魔术发生在 POST 上。如果您使用的是 Razor,您的操作方法可能会接受 A
类型的对象作为参数。 ASP.NET MVC 足够智能,可以查看您想要发送回控制器的所有属性并映射到类A
。
请记住,Razor 会转换为 HTML。这意味着当您单击提交按钮时,Razor 在那里没有电源。
-
Javascript
渲染页面后,您应该将所有内容都视为 HTML。在您处理submit
事件的那一刻,Razor 无法帮助您。用 HTML 术语思考,当你写 @Html.Raw(Json.Encode(@Model))
时,你认为它会呈现什么?
请记住,您使用Model
仅用于创建您将呈现给用户的表单(具有默认值)。您不应期望每次填写表单时都会更新 Model
属性(如某些前端框架)。我建议您尝试一下:只需在页面上按 CTRL+U 并查看该特定行。
【讨论】:
以上是关于将剃须刀模型转换为 JS 对象属性为空的主要内容,如果未能解决你的问题,请参考以下文章