c# - 从 Javascript 调用 MVC Controller 时为空值

标签 c# jquery asp.net-mvc razor asp.net-mvc-4

在我的 MVC View 模型中,我在表单内有一个表。

从我的 javascript 中,我调用我的 Controller ,如下所示:

$.ajax(
    {
        type: "POST",
        url: "@Url.Action("ReorderClues", "Clues", Model)",
        data: JSON.stringify(positions),
        contentType:'application/json'
    });

我的 Controller 签名如下:

public ActionResult ReorderClues(TreasureHuntDetails treasureHuntDetails, int[] ids)

我发现,当 javascript 以这种方式调用 Controller 时,数据模型(TreasureHuntDetails 对象)仅填充有 treasureHuntId,其他所有内容均为 null。第二个参数,ids 数组填充成功 - 这是我在 ajax 函数中使用 JSON.stringify() 的参数。

我不明白为什么除了 TreasureHuntId 之外其他所有内容都是空的。在表单中,我为对象的每个属性都有一个 HiddenFor 行,如下所示:

        @Html.HiddenFor(m => m.CompletionMessage)
        @Html.HiddenFor(m => m.Description)
        @Html.HiddenFor(m => m.Clues)
        @Html.HiddenFor(m => m.Leaderboard)
        @Html.HiddenFor(m => m.TreasureHuntId)
        etc.

我不明白 TreasureHuntId 变量有什么特别之处,因为它是唯一一个其值是到达 Controller 的对象上唯一填充的变量。有任何想法吗?我可能做错了什么?

当我仅使用数据模型(TreasureHuntDetails)以正常方式调用 Controller 时,所有内容都会正确填充,因此仅在 javascript 中我还添加了 Ids 数组(javascript 中的“positions”变量)代码片段是一个整数数组)。

最佳答案

您实际上并没有传回您的模型。 ID 存在其中的原因可能是因为它已经存在于 HttpGet 请求的 url 中。

首先,更改您的网址,使其上不包含模型:

url: "@Url.Action("ReorderClues", "Clues")",

然后更改您的 ajax 方法以将模型传回:

data: { treasureHuntDetails: $("form").serialize(), ids: JSON.stringify(positions) }

关于c# - 从 Javascript 调用 MVC Controller 时为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203048/

相关文章:

jquery - 如何从主题滚轮站点在 jquery mobile 中添加自定义主题?

MVC中的css3pie,pie.htc文件放在哪里?

css - Bootstrap 图标显示不好

c# - TfvcTemplate.12.xaml 构建配置在哪里

c# - 使用 OWIN Identity v2 Claims 跟踪 WebAPI2 应用程序中的自定义属性

c# - 客户关系管理 2011 : Limitation of query expression?

c# - 如果子表包含在 C#/ADO.NET 2.0 中的父表中没有父项的行,是否可以将 DataRelation 添加到 DataSet

javascript - 选中的选项未正确保存

javascript - 使用 javascript 在类的基础上重新排列表格行

html - 在 MVC View 中呈现富文本?