【问题标题】:gets called from separate controller (ASP.NET MVC3)从单独的控制器(ASP.NET MVC3)调用
【发布时间】:2011-04-05 13:44:08
【问题描述】:

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

问题是 [HttpGet] 和 [HttpPost] 动作都被调用了,并且由于 post-method 返回调用动作的视图,所以什么都没有显示。

获取方法:

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

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

【问题讨论】:

  • 您能澄清一下您期望的行为吗?你是什​​么意思,这两个动作都被调用?浏览器应该只发出一个请求。

标签: asp.net-mvc-3 viewmodel


【解决方案1】:

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

【讨论】:

  • 在阅读完该主题后,我还有另一个问题。我想要的是一个获取请求,我得到了,但我也触发了发布操作。我错了吗?
  • 如果您希望控制器操作可以通过 GET 请求访问,那么您需要删除 HttpPost 属性。 GET 和 POST 是相互排斥的,同时以某种方式同时执行这两种操作的意图似乎反映了对 HTTP 的根本误解。 HTTP 规范文档位于w3.org/Protocols/rfc2616/rfc2616.html
  • 也许我解释得不好。我想要一个 GET 但在控制器中触发了一个发布操作。无论如何,我现在使用的是 jQuery/Ajax,它正在工作。
【解决方案2】:

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

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

【讨论】:

  • 谢谢,我试试 jQuery!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多