我在ASP.NET MVC beta应用程序中得到了这个ajax表单:
<%using (this.Ajax.BeginForm("Edit", "Subscriber",
new AjaxOptions { OnSuccess = "onEditResult", HttpMethod = "GET" }))
{%>
<%=Html.Hidden("idSub", p.Id.ToString())%>
<input type="submit" value="Edit"/><%
} %>
我的控制器方法:
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult Edit(String idSub)
{ (...)
}
但是idSub总是为null,在升级到测试版之前我发誓我觉得这个方法有效!
我按照建议升级了JS文件(Microsoft Ajax)和程序集。
答案 0 :(得分:0)
我发现这段代码有效(用POST动词代替GET,并使用formcollection作为控制器方法的参数)
using (this.Ajax.BeginForm("BeginEdit", "Subscriber",
new AjaxOptions { OnSuccess = "onEditResult", HttpMethod = "POST" }))
{%>
<%=Html.Hidden("idSub", p.Id.ToString())%>
<input type="submit" value="Edit"/><%
}
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult BeginEdit(FormCollection form)
{
String idSub = form["idSub"];
}
答案 1 :(得分:0)
我收到了错误,它来自Spring集成。在ControllerBase类中,IValueProvider的getter(从路径data / querystring / form获取值的类)返回_valueProvider,如下所示:
get {
if (_valueProvider == null && ControllerContext != null) {
_valueProvider = new DefaultValueProvider(ControllerContext);
}
return _valueProvider;
}
由于我的控制器是由Spring工厂从MVCContrib项目构建的,因此它被配置为单例,因此ValueProvider具有来自第一个请求而不是当前请求的ControllerContext属性值。
所以DefaultValueProvider类中的这一行:
HttpRequestBase request = ControllerContext.HttpContext.Request;
总是返回第一个Request对象,它没有QueryString,因此我的方法没有参数值。
我更改Spring配置以获取Controller的新实例,我认为这是一件好事,现在方法参数已正确填充。