C# 部分视图中的 ASP.NET MVC 验证并返回到父视图
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18633923/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
ASP.NET MVC Validation in Partial View and return to Parent view
提问by Paresh Bhurke
My Background
我的背景
I am working on first serious project using ASP.NET MVC 4. I am working on web development since classic ASP days and have got good hold on Webforms. MVC is very exciting and am doing good progress. But now I am in a situation where I need help on this forum.
我正在使用 ASP.NET MVC 4 从事第一个严肃的项目。我从经典的 ASP 时代开始从事 Web 开发,并且很好地掌握了 Webforms。MVC 非常令人兴奋,并且进展顺利。但是现在我在这个论坛上需要帮助。
Query background
查询背景
I have a parent view and inside it there is a partial view. Partial view contains a form and submit button. The partial view has its own local view model and that view model is one of the properties of the Parent view model.
我有一个父视图,里面有一个局部视图。部分视图包含一个表单和提交按钮。局部视图有自己的局部视图模型,该视图模型是父视图模型的属性之一。
In case the validations on partial views fail, I want to, show the parent view as it is and highlight invalid fields in partial view.
如果部分视图的验证失败,我想按原样显示父视图并突出显示部分视图中的无效字段。
The code is not breaking anywhere but when there is a validation error, somehow, i am not finding right way to show parent view with initialised model passed to it. And of course, to highlight the errors in partial view.
代码没有在任何地方中断,但是当出现验证错误时,不知何故,我找不到正确的方法来显示传递给它的初始化模型的父视图。当然,在局部视图中突出显示错误。
Any help would be appreciated. Thanks.
任何帮助,将不胜感激。谢谢。
Code looks like following:
代码如下所示:
View Models:
查看型号:
public class ParentViewModel
{
public int TitleId { get; set; }
public string Name { get; set; }
public ChildViewModel Child { get; set; }
}
public class ChildViewModel
{
[Required]
public decimal Rating { get; set; }
[Required]
[StringLength(500)]
[Display(Description = "Review")]
[RegularExpression("([a-zA-Z0-9 .&'-]+)", ErrorMessage = "Enter only alphabets and numbers of First Name")]
public string ReviewText { get; set; }
}
Controller
控制器
public class TestController : Controller
{
public ActionResult Index()
{
var model = new ParentViewModel()
{
TitleId = 1,Name = "Parent name",
Child = new ChildViewModel()
{
Rating = 2.5M, ReviewText = "Its a must watch!"
}
};
return View("Index", model);
}
[HttpPost]
public ActionResult SubmitReview(ChildViewModel model)
{
if (ModelState.IsValid )
{
return View("_child", model);
}
ModelState.AddModelError("", "Some Error.");
return View("_child", model);
}
}
Parent View
父视图
@model ParentViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<div>
@Model.TitleId, @Model.Name
</div>
<div>
@Html.Partial("_child", Model.Child)
</div>
</body>
</html>
Partial View (_child.cshtml)
部分视图 (_child.cshtml)
@model ChildViewModel
@using (Html.BeginForm("SubmitReview", "Test"))
{
@Html.ValidationSummary(true)
@Html.TextBoxFor(m => m.Rating) @Html.ValidationMessageFor(m => m.Rating)
@Html.TextBoxFor(m => m.ReviewText) @Html.ValidationMessageFor(m => m.ReviewText)
<input type="submit" value="Log in" />
}
采纳答案by Alexandr Mihalciuc
You need to show the parent view not the child one, so the action should look like:
您需要显示父视图而不是子视图,因此操作应如下所示:
[HttpPost]
public ActionResult SubmitReview(ChildViewModel model)
{
var parentViewModel = write init code here;
parentViewModel.ChildModel = model;
if (ModelState.IsValid )
{
return View("Index", parentViewModel );
}
ModelState.AddModelError("", "Some Error.");
return View("Index", parentViewModel );
}