我的项目有两个模型,我在第一页显示第一个模型。后期处理效果很好,我可以看到所有数据。控制器构建第二个模型并显示第二个页面。这第二页根本不会发布。它根本无法验证所需的字段。我是MVC的新手,所以很可能有一些我很想念的东西。有人能指出我的方向,一些关键的事情要寻找吗?
由于安全性,我无法真正分享大量代码。但基本上,第一种形式只是一个简单的模型,加载了文本框的助手并进行了验证。发布时,调用第二个模型并显示页面。但它根本无法验证或发布。
[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
}
答案 0 :(得分:0)
好的,我不能确定你的代码,但试试这个。
在您的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()
但是你没有选择通过控制器验证它,这反过来可能导致未经处理的例外。
或者,如果所有其他方法都失败,您可以执行以下操作(如果您在视图中使用了反伪造验证,请执行以下操作):
public ActionResult TourRequest()
{
//Do the HTTPGET stuff here
}
[HttpPost, ActionName("TourRequest")]
public ActionResult TourRequestPostRequest()
{
// Do the post method stuff here
}
请记住,这只是猜测,因为我在视图中看不到您的代码。
答案 1 :(得分:0)
有时最简单的事情就在你面前而你却错过了。我在@ HTML.BEGINFORM括号的第二个表格OUTSIDE上有提交按钮。笨
答案 2 :(得分:-1)
在你的帖子控制器中纠正这个:
只需删除这些行
即可 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()中的Request。