对象引用未设置为对象的实例,参数为null

时间:2012-03-07 15:20:20

标签: c# asp.net-mvc-2

我遇到的问题是将我的观点中的参数传递给我的控制器

我在视图中有这个代码片段:

<a class="btn-simple" onclick="submitDetails('Dashboard', 'Cancel', '<%=Model.Data.Id %>', $('form'));">save</a>

这是来自我的控制器:

[HttpPost]
public ActionResult Cancel(string id, FormCollection collection)
{
       var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id));
}

我收到一条错误,说“id”为空,但是当我在视图中测试Model.Data.Id时,它不是null。

这是我的submitDetails函数:

function submitDetails(controller, method, id, form) {
    form.ajaxSubmit({ target: '#itemdetails' });

}

我想要完成的是从视图中的按钮返回我的控制器,最初称为视图的方法的“[HttpPost]”版本

1 个答案:

答案 0 :(得分:1)

确保您提交的表单包含带有id的隐藏字段,或者将其作为查询字符串参数传递:

<% using (Html.BeginForm("Dashboard", "Cancel", new { id = Model.Data.Id })) { %>
    ...
<% } %>

或者如果您想传递动态网址,则可以执行以下操作:

<a class="btn-simple" onclick="submitDetails('<%= Url.Action("Dashboard", "Cancel", new { id = Model.Data.Id }) %>', $('form'));">save</a>

然后:

function submitDetails(url, form) {
    form.ajaxSubmit({ url: url, target: '#itemdetails' });
}

更新:

如果你想避免使用submitDetails javascript方法并让你的锚点成为表单的提交按钮:

<% using (Html.BeginForm("Dashboard", "Cancel", new { id = Model.Data.Id })) { %>
    ...

    <button class="btn-simple" type="submit">save</button>
<% } %>