将剃刀模型转换为JS对象的属性为null

时间:2019-06-12 19:19:34

标签: javascript jquery asp.net asp.net-mvc razor

我尝试将模型转换为javascript对象,但是属性为null,如果我切换到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 个答案:

答案 0 :(得分:1)

这是它的设计方式。

我们来谈谈:

  1. 剃刀

绝对可以确定您拥有A类。当您在控制器中点击操作方法时,您将返回一个视图,其中包含一个类型为A的模型。

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

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

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

  1. JavaScript

呈现页面后,应将所有内容都视为HTML。在处理submit事件时,Razor无法帮助您。用HTML的角度思考,您写@Html.Raw(Json.Encode(@Model))时会呈现什么?

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