首页 > 解决方案 > 将剃须刀模型转换为 JS 对象属性为空

问题描述

我尝试将我的模型转换为 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));
    });

标签: javascriptjqueryasp.netasp.net-mvcrazor

解决方案


这就是它的设计方式。

让我们谈谈:

  1. 剃刀

更确定你有一堂课A。当您在控制器中点击您的操作方法时,您会返回一个具有 A 类型的模型的视图。

您可以根据类的A外观创建表单。模型有什么价值?可能所有属性都有一个默认值。这就是 GET HTTP 请求上发生的情况。

魔术发生在 POST 上。如果您使用的是 Razor,您的操作方法可能会接受 type 的对象作为参数A。ASP.NET MVC 足够智能,可以查看您想要发送回控制器并映射到类的所有属性A

请记住,Razor 会转换为 HTML。这意味着当您单击提交按钮时,Razor 在那里没有电源。

  1. Javascript

渲染页面后,您应该将所有内容都视为 HTML。submit在您处理事件的那一刻,Razor 无法帮助您。用 HTML 术语思考,你认为它会在你编写时呈现什么@Html.Raw(Json.Encode(@Model))

请记住,您使用Modelonly 创建将呈现给用户的表单(具有默认值)。您不应期望Model每次填写表单时都会更新属性(如某些前端框架)。我建议您尝试一下:只需在页面上按 CTRL+U 并查看该特定行。


推荐阅读