MVC2中的Ajax.BeginForm错误?用于发布错误控制器的Ajax?

时间:2010-09-21 21:01:32

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

我正在使用ajax表单尝试使用Create方法回发CustomerController。这是代码

<% using (Ajax.BeginForm("Create", "Customer", new AjaxOptions { LoadingElementId = "saving"}, new { @class = "block_content form" }))
        {%>...

当我的html表单呈现时,表单看起来像这样

<form onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'saving', onComplete: Function.createDelegate(this, $j('#accoutcreate').dialog('close')) });" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" method="post" class="block_content form" action="/Job/Create?Length=3"> ...

正如您所看到的,表单实际上是发布到/ Job / Create而不是/ Customer / Create

我不确定为什么会这样。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我猜,框架采取了不合适的方法。 也许这个:

public static MvcForm BeginForm(this AjaxHelper ajaxHelper,
string actionName, object routeValues, AjaxOptions ajaxOptions,
object htmlAttributes);

你提供了:

"Create" - actionName,   "Customer" - routeValues,   new AjaxOptions(..) - ajaxOptions,   new { @class = "block_content form" }
- htmlAttributes.

注意,routeValues有对象类型和“Customer” - 字符串,C#编译器的所有内容都没问题,但不适合你。

尝试写:

(Ajax.BeginForm("Create", "Customer", null,
new AjaxOptions { LoadingElementId = "saving"}
new { @class = "block_content form" }))

答案 1 :(得分:0)

您是否可以在Global.asax中设置路由,将“\ Job”请求映射到“CustomerController”?如果是这样,MVC中的路由引擎将返回“\ Job”作为URL,以保持URL一致。

路线看起来像这样:

        routes.MapRoute("Name", "Job/Create", new { controller = "Customer", action = "Create" });
相关问题