gpt4 book ai didi

c# - 从部分 View 中的表单发布 - 为什么会触发错误的 Controller 操作?

转载 作者:可可西里 更新时间:2023-11-01 13:16:04 24 4
gpt4 key购买 nike

请耐心等待我描述问题。

一个使用局部 View 的 MVC3 应用程序。无法在其父模型的详细信息 View 的部分 View 中发布评论表单。

供引用 ArticleViewModel 有一个 CommentsViewModel 的集合所以有 OTM 关系。

详情 View

@model ArticleViewModel

// Renders the Article and its Comments - no forms, just display markup
// A nested _Comments partial is used to render the article's comments.
@Html.Partial("_Article", Model)

// Renders HTML and Javascript for the Pagedown editor - POST form inside.
@Html.Partial("_CommentEditor", new CommentViewModel())

@section scripts { /* code here for validation and the javascript editor */ }

_CommentEditor 局部 View

@model CommentViewModel

@using (Html.BeginForm("Comment","Article",FormMethod.Post)) {
@Html.TextAreaFor(m => m.Content)
<input type="submit" value="Submit" />
<input type="reset" value="Clear" />
}

文章 Controller

public ActionResult Details(string slug) {
return View(_articleService.Get(slug));
}

[HttpPost]
public ActionResult Comment(string slug, CommentViewModel comment) {
if(ModelState.IsValid) {
_articleService.AddComment(comment, slug);
}
return RedirectToAction("Details", new { Slug = slug });
}

场景/问题

  1. /Article/Details/{slug} 的 Http 请求正确呈现文章、其评论和编辑器表单。

  2. 编辑器按预期工作,但在单击“提交”时,我注意到调用了我的 Controller 上的“详细信息”操作,而不是“HttpPost 评论”操作。

如您所见,Razor Form 帮助程序使用 POSTArticle Controller 上指定 Comment 操作。

问题

为什么会这样?我错过了什么?

最佳答案

笨蛋奖!

答案是路由。

仔细观察 Fiddler,我实际上是在向 /article/comment 发送一个 POST 请求,所以我检查了我的路由……我怎么错过了这个,我不知道不知道:

routes.MapRoute("Article-Create", "article/create", new { controller = "Article", action = "Create" });
routes.MapRoute("Article-Edit", "article/edit/{slug}", new { controller = "Article", action = "Edit" });
routes.MapRoute("Article-Delete", "article/delete/{slug}", new { controller = "Article", action = "Delete" });
routes.MapRoute("Article", "article/{slug}", new { controller = "Article", action = "Details" });
routes.MapRoute("Articles", "articles", new { controller = "Article", action = "Index" });

评论操作没有明确的路线。有一个 用于获取文章 (article/{slug}) 的包罗万象的 REST-ish 路由。所以 Comment POST 在到达默认路由之前由它处理......

我的具体解决方案(我喜欢显式路由 - 即使它给我带来麻烦)是添加一条评论路由,就是关于包罗万象的 article/{slug} 模式:

routes.MapRoute("Article-Comment", "article/comment", new { controller = "Article", action = "Comment" });

问题解决了。尴尬。

关于c# - 从部分 View 中的表单发布 - 为什么会触发错误的 Controller 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com