在我的 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/