Asp.net mvc 4 第二个MVC表单未发布

Asp.net mvc 4 第二个MVC表单未发布,asp.net-mvc-4,Asp.net Mvc 4,我的项目有两个模型,我在第一页显示第一个模型。后期处理效果很好,我可以看到所有的数据。控制器构建第二个模型并显示第二个页面。这第二页根本不会发布。它甚至根本不会验证所需的字段。我是MVC的新手,所以很可能我遗漏了一些明显的东西。有人能给我指个方向,一些关键的东西吗 由于安全原因,我不能真正共享很多代码。但基本上,第一个表单只是一个简单的模型,加载了TextBoxforHelpers并进行了验证。发布后,将调用第二个模型并显示页面。但它根本无法验证或发布 [HttpGet] public Ac

我的项目有两个模型,我在第一页显示第一个模型。后期处理效果很好,我可以看到所有的数据。控制器构建第二个模型并显示第二个页面。这第二页根本不会发布。它甚至根本不会验证所需的字段。我是MVC的新手,所以很可能我遗漏了一些明显的东西。有人能给我指个方向,一些关键的东西吗

由于安全原因,我不能真正共享很多代码。但基本上,第一个表单只是一个简单的模型,加载了TextBoxforHelpers并进行了验证。发布后,将调用第二个模型并显示页面。但它根本无法验证或发布

 [HttpGet]
 public ActionResult TourRequest()
 {
    PointofContactModel model = new PointofContactModel();
    return View(model);
 }
 [HttpPost]
 public ActionaResult TourRequest(PointofContactModel model)
 {
    model.validate(this);
    model.save(this);
    TourModel tourModel = new TourModel();
    return View("TourDetails", tourModel);
 }
基本上就是这样。我以@Html.BeginForm开始每个表单,它们在呈现后看起来很好-查看视图源

由于某些原因,我无法在任何帖子中添加评论,甚至是我自己的帖子!我尝试了重定向并为TourModel执行HttpGet的建议,但该页面仍然无法验证或发布。我迷路了

第一页:

 @model Requests.Web.Models.PointofContactModel
 @using (Html.BeginForm("TourRequest", "RequestController", FormMethod.Post))
 {
  // fields filled in
 }
第二页,基本相同,型号不同

 @model Requests.Web>Models.TourModel
 @using (Html.BeginForm("TourDetails", "RequestController", FormMethod.Post))
 {
   //stuff
 }

只需在post controller中更正此问题:

把这些线去掉就行了

 TourModel tourModel = new TourModel();
 return View("TourDetails", tourModel);
写下这个

return RedirectToAction("TourDetails");
您的
TourDetails
操作如下所示:

[HttpGet]
Public ActionResult TourDetails
{
   TourModel tourModel = new TourModel();
   //bind model here if required
   retrun View(tourModel);
}
请记住,这只是一个猜测,因为您没有在视图中发布代码


在编辑中,将RequestController更改为仅在BeginForm()中请求

好的,如果不看你的代码,我不能确定,但是试试这个

在HTML中,请使用以下代码:

@using(Html.BeginForm("TourDetails", "ControllerName", FormMethod.Post, null))
{
    @Html.AntiForgeryToken()
    // You don't necessarily need this, but if you already do then you need to put
    // [ValidateAntiForgeryToken] on the top of your action
{
控制器的结构是合理的,我认为问题是因为您有
@Html.AntiForgeryToken()
,但您没有选择由控制器验证它,这反过来可能会导致未处理的异常

或者,如果所有其他操作都失败,您可以执行以下操作(如果您在视图中使用防伪验证,请将其放入):


请记住,这只是一个猜测,因为我无法在视图中看到您的代码。

有时最简单的事情就在您面前,而您却错过了它。我在@HTML.begin括号外的第二个表单上有提交按钮。愚蠢。

也许你错过了表单。你有代码示例吗?你需要发布你的操作方法,可能还有你的视图代码,只需删除敏感部分。@mxismool-发布了我现在可以重新键入的内容。很遗憾,无法在单独的网络上进行复制和粘贴。您可以发布HTML吗?我想我知道你的问题是什么,但我不能确定。只是出于好奇:有什么区别?@JTMon…当我们使用return view()时,只会将html返回到视图中,浏览器中的url没有变化,除了重定向到操作一个新的http(302)之外没有其他变化请求被生成,浏览器中的url发生变化。我理解返回视图和重定向操作之间的区别。我只是想知道它与原始问题和禁止发布问题有什么关系。@JTMon…我不认为你在不同的视图上,在浏览器中有不同视图的url是个好主意。关于你最近的评论,你是什么意思?
public ActionResult TourRequest()
{
     //Do the HTTPGET stuff here
}

[HttpPost, ActionName("TourRequest")]
public ActionResult TourRequestPostRequest()
{
     // Do the post method stuff here
}