将剃须刀模型转换为 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 对象属性为空的主要内容,如果未能解决你的问题,请参考以下文章

如果模型为空,.NET 剃须刀显示自定义文本

如何为three.js模型加载器将对象转换为json文件

laravel怎么把对象转换为数组

Angular:Typescript 将 JSON 响应转换为对象模型不起作用

剃须刀页面,如何将 json 序列化字符串传递给模型属性

将 three.js 模型转换为 svg