2011-04-05 145 views
0

我试图在一个单独的控制器中使用一个actionlink调用一个动作。从单独的控制器(ASP.NET MVC3)调用

问题是[HttpGet]和[HttpPost]动作被调用,并且由于post-method返回调用动作的视图,因此不会显示任何内容。

Get方法:

[HttpGet] 
     public ActionResult View(int id, int index) 
     { 
      var form = formService.GetForm(id); 
      var pageModel = new PageViewModel(); 

      var page = form.Pages.ElementAt(index); 

      ModelCopier.CopyModel(page, pageModel); 
      ModelCopier.CopyModel(form, pageModel); 

      return View(pageModel); 
     } 

POST方法

[HttpPost] 
    public ActionResult View(PageViewModel pageViewModel) 
    { 
     if (!ModelState.IsValid) 
     { 
      return RedirectToAction("Details", "Forms", new { id = pageViewModel.FormId }); 
     } 
      var pageToEdit = pageService.GetPage(pageViewModel.PageId); 

      ModelCopier.CopyModel(pageViewModel, pageToEdit); 

      pageService.SavePage(); 
      return RedirectToAction("Details", "Forms", new {id = pageViewModel.FormId}); 
    } 

它是如何从视图调用(由另一个控制器返回的视图):

@Html.ActionLink("View", "View", "Pages", new { id = Model.FormId, index = item.Index-1 }, null) 

我在这里做错了什么?我基本上希望它能够作为更新/编辑功能。返回的视图包含视图模型的简单形式。

+0

你能否澄清你期望的行为?你是什​​么意思,这两个行动被称为?浏览器应该只发出一个请求。 – marcind 2011-04-05 14:02:20

回答

0

的动作链接发出GET请求。你将不得不实现一些捕获url和参数的JavaScript函数,并动态地使用POST方法创建和提交一个新表单,或者执行一个Ajax POST。您可以编写自己的HTML助手来包装此功能,但单击<a>标记(这是由Html.ActionLink生成的内容)的默认功能将发出GET请求。

+0

很好的建议,谢谢! – tohereknowswhen 2011-04-05 14:07:56

+0

通过线程阅读后,我有另一个问题。我想要的是获取请求,我得到了,但我也触发了后操作。我错了吗? – tohereknowswhen 2011-04-06 06:38:16

+0

如果您希望控制器操作可以访问GET请求,那么您需要删除'HttpPost'属性。 GET和POST是相互排斥的,并且意图以某种方式同时做出这两个似乎反映了对HTTP的根本性误解。有关HTTP的规范文档可在http://www.w3.org/Protocols/rfc2616/rfc2616.html上获得。 – smartcaveman 2011-04-06 14:25:24

0

我不认为你可以使用一个动作链接 - 看到这个question

选项是使用jQuery的数据或交换张贴到一个简单的表格,并提交

+0

谢谢,我会试试我一些jQuery! – tohereknowswhen 2011-04-05 14:01:15

相关问题