Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在部分视图中进行ASP.NET MVC验证并返回到父视图_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 在部分视图中进行ASP.NET MVC验证并返回到父视图

C# 在部分视图中进行ASP.NET MVC验证并返回到父视图,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我的背景 我正在使用ASP.NETMVC4进行第一个严肃的项目。我从经典的ASP时代就开始从事web开发,并且对Webforms有很好的掌握。MVC非常令人兴奋,我取得了很好的进步。但现在我在这个论坛上需要帮助 查询背景 我有一个父视图,其中有一个局部视图。部分视图包含表单和提交按钮。局部视图有自己的局部视图模型,该视图模型是父视图模型的属性之一 如果部分视图上的验证失败,我希望显示父视图,并突出显示部分视图中的无效字段 代码不会在任何地方中断,但当出现验证错误时,不知何故,我没有找到正确的方法

我的背景

我正在使用ASP.NETMVC4进行第一个严肃的项目。我从经典的ASP时代就开始从事web开发,并且对Webforms有很好的掌握。MVC非常令人兴奋,我取得了很好的进步。但现在我在这个论坛上需要帮助

查询背景

我有一个父视图,其中有一个局部视图。部分视图包含表单和提交按钮。局部视图有自己的局部视图模型,该视图模型是父视图模型的属性之一

如果部分视图上的验证失败,我希望显示父视图,并突出显示部分视图中的无效字段

代码不会在任何地方中断,但当出现验证错误时,不知何故,我没有找到正确的方法来显示传递了初始化模型的父视图。当然,在局部视图中突出显示错误

任何帮助都将不胜感激。谢谢

代码如下所示:

查看模型:

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; }
}
控制器

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);
    }
}
父视图

@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>
@model ParentViewModel
@{
布局=空;
}
指数
@Model.TitleId,@Model.Name
@Html.Partial(“_child”,Model.child)
部分视图(\u child.cshtml)

@model儿童视图模型
@使用(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)
}

您需要显示父视图而不是子视图,因此操作应如下所示:

[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 );
    }

这很有道理。但是有没有办法避免在提交时再次初始化父模型?现在我正试图将父模型传递给SubmitReview,但是父模型不记得这些值。但是谢谢你的建议,我会实现的,因为它会工作。在提交时,我应该如何获得家长的密钥来初始化它?我希望我有点道理……你可以将表单移动到父视图(这实际上是一个很好的做法),然后将父模型添加到隐藏字段中,这样当你单击“提交”时,你将在控制器中获得完整的数据。我一直在努力找到解决方案!
[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 );
    }