Asp.net mvc 3 url中的mvc操作名称

Asp.net mvc 3 url中的mvc操作名称,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,更新: 进入save方法的模型是PartialViewModel,在save方法中,它被推送到索引的ContactViewModel中并发回。这还不清楚 我正在玩MVC3,有一个带有SaveDetails操作的联系人控制器。索引cshtml有一个分部,其操作指向此控制器的窗体 当我在未完全完成表单的情况下提交表单,从而触发验证时,url现在包含SaveDetails操作名称(http://localhost:7401/Contact/SaveDetails) 表格编号为: @using (Htm

更新:

进入save方法的模型是PartialViewModel,在save方法中,它被推送到索引的ContactViewModel中并发回。这还不清楚

我正在玩MVC3,有一个带有SaveDetails操作的联系人控制器。索引cshtml有一个分部,其操作指向此控制器的窗体

当我在未完全完成表单的情况下提交表单,从而触发验证时,url现在包含SaveDetails操作名称(http://localhost:7401/Contact/SaveDetails)

表格编号为:

@using (Html.BeginForm("SaveDetails", "Contact")) {
    ...
}
控制器操作如下所示:

public ActionResult SaveDetails(Models.PartialsViewModel pvm)
{
    return View("Index", new ContactViewModel{ PartialsViewModel = pvm } );
}

我做错了什么?

表单的action属性设置为SaveDetails action,因此在提交后,它会将浏览器重定向到此操作。

我不认为您做错了什么,但我认为您无法实现您想要实现的目标。请求必须到达某个地方,在mvc中,url用于标识要执行的操作。如果你没有提交一篇文章回来,那么url将会改变

将表单提交给不同操作的一种方法是使用一些ajax

提交表格是一个帖子。您可以使用属性来标识操作应响应的请求方法。这意味着您可以创建另一个也称为Index的操作,但要赋予它[HttpPost]属性

[HttpPost]
public ActionResult Index(Models.ContactViewModel cvm)
{
    return View();
}

这样,它就不会在url中显示操作。

那么,如何使它不显示操作,并将其重定向到模型的原始索引方法?页面上有两个表单,这就是为什么他们不只是发布到索引方法,而是另一个操作。我在页面上有两个表单,每个表单都有自己的模型,这就是为什么我不发布到索引操作。你可以使用ajax将每个表单提交到不同的操作,而不在url中显示acton。我将使用javascript,但只有当我把它作为标准帖子使用时。