2011-11-20 114 views
0

UPDATE:MVC动作名称

我的模型进入的保存方法是PartialViewModel,这在保存方法,被压入指数的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 }); 
} 

我在做什么错?

回答

0

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

+0

那么,我该如何让它不这样做,并将其重定向到模型的原始索引方法?在页面上有两种形式,这就是为什么他们不只是张贴到索引方法,而是另一个动作。 – Paul

0

我不认为你做错了什么,但我认为你不能做你想要做的事情。一个请求必须去某个地方,在mvc中,这个url用来标识你想要执行的动作。如果您没有提交回帖,那么网址将会改变。

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

提交表单是POST。您可以使用属性来确定操作应该响应的请求方法。这意味着您可以创建另一个称为Index的操作,但为其指定[HttpPost]属性。

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

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

+0

我在页面上有两种形式,每种都有自己的模型,这就是为什么我没有发布到索引动作。 – Paul

+0

您可以使用ajax将每个表单提交给不同的操作,并且不会在url中显示acton。 – Dallas

+0

我打算使用javascript,但只有当我将它作为标准帖子来使用时。 – Paul

相关问题