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