从单独的控制器调用(ASP.NET MVC3)

时间:2011-04-05 13:44:09

标签: asp.net-mvc-3 viewmodel

我正在尝试使用actionlink在单独的控制器中调用操作。

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

获取方法:

[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);
        }

发布方法

[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)

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

2 个答案:

答案 0 :(得分:0)

我认为您无法使用操作链接 - 请参阅此question

选项是使用jQuery发布数据或交换到简单表单并提交

答案 1 :(得分:0)

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