asp.net MVC验证返回带有验证的新视图

本文关键字:验证 新视图 返回 net MVC asp | 更新日期: 2023-09-27 17:59:50

当我单击"继续"按钮时,我的表单会生成一个正在验证的字段的新视图,并显示缺少的内容。如何在同一个局部视图上显示验证。

我的控制器:

namespace LoanApp.Controllers
{
public class HomeController : Controller
{
    public ActionResult Index()
    {
        // This is how we prepopulate the list of loan types. Doing it here b/c one day this will be from a list from a service.
        var vm = new Step1ViewModel();
        vm.AllAvailableLoanTypes = new List<string>();
        vm.AllAvailableLoanTypes.Add("Auto Refinance");
        vm.AllAvailableLoanTypes.Add("Auto Purchase");
        vm.AllAvailableLoanTypes.Add("Auto PreApproval");
        vm.AllAvailableLoanTypes.Add("Signature Loan");
        vm.AllAvailableLoanTypes.Add("Credit Card");
        vm.AllAvailableLoanTypes.Add("Home Equity");
        vm.AllAvailableLoanTypes.Add("10 Year 1st Mortgage");
        return View(vm);
    }

    [HttpPost]
    public ActionResult SelectLoanType(Step1ViewModel model)
    {
        // For this example I slapped the type in Session, you could post it through in each subsequent viewmodel and just hide it on the form in a Html.Hidden()
        Session["LoanType"] = model.LoanType;
        return PartialView("PrimaryApplicantPartial");

    }
    [HttpPost]
    public ActionResult PrimaryApplicant(PrimaryApplicantViewModel model)
    {
        // Make sure session didnt get eaten.
        var loanType = "";
        if (Session["LoanType"] != null)
        {
            loanType = Session["LoanType"].ToString();
        }
        // Here we decide which view to show next. in the frotn end you may need to handle what to change labels to in the wizard maybe via JQ/JS
        switch (loanType)
        {
            case "Auto Refinance":
                if (ModelState.IsValid)
                {
                    return PartialView("AutoRefinance");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            case "Auto Purchase":
                if (ModelState.IsValid)
                {
                    return PartialView("AutoPurchase");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            case "Auto PreApproval":
                if (ModelState.IsValid)
                {
                    return PartialView("AutoPreApproval");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            case "Signature Loan":
                if (ModelState.IsValid)
                {
                    return PartialView("SignatureLoan");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            case "Credit Card":
                if (ModelState.IsValid)
                {
                    return PartialView("CreditCard");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            case "Home Equity":
                if (ModelState.IsValid)
                {
                    return PartialView("HomeEquity");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            case "10 Year 1st Mortgage":
                if (ModelState.IsValid)
                {
                    return PartialView("TenYearFirstMortgage");
                }
                else
                {
                    ModelState.AddModelError("", "Information Incomplete");
                    return PartialView("PrimaryApplicantPartial");
                }
            default:
                return PartialView("PrimaryApplicantPartial");
        }

    }
    [HttpPost]
    public ActionResult AutoRefinance(AutoRefinanceViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("AutoRefinanceFinal");
    }
    [HttpPost]
    public ActionResult AutoPurchase(AutoPurchaseViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("NextView");
    }
    [HttpPost]
    public ActionResult AutoPreApproval(AutoPreApprovalViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("NextView");
    }
    [HttpPost]
    public ActionResult SignatureLoan(SignatureLoanViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("NextView");
    }
    [HttpPost]
    public ActionResult CreditCard(CreditCardViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("NextView");
    }
    [HttpPost]
    public ActionResult HomeEquity(HomeEquityViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("NextView");
    }
    [HttpPost]
    public ActionResult TenYearFirstMortgage(TenYearFirstMortgageViewModel model)
    {
        //do stuff here
        // This will fail for now with a lovely 500
        return PartialView("NextView");
    }
}

}

您将看到上面的验证代码。这是我的部分观点:

@using Newtonsoft.Json
@model LoanApp.Models.PrimaryApplicantViewModel
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.maskedinput.js"></script>
<script>
$("input[name='JointOwner']").change(function () {
    $("#JointApplicantInfo").toggle();
});
jQuery(function ($) {
    $("#dob").mask("99/99/9999");
    $("#phone").mask("(999) 999-9999");
    $("#ssn").mask("999-99-9999");
    $("#zip").mask("99999");
});

</script>

@using (Ajax.BeginForm("PrimaryApplicant", new AjaxOptions { HttpMethod = "POST",     InsertionMode = InsertionMode.Replace, UpdateTargetId = "step3", OnSuccess = "showStep3"     }))
{
<h4>Primary Applicant Information</h4>
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<hr/>
    <div class="form-group">
        @Html.LabelFor(m => m.FirstName, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.FirstName, new { @class = "form-control", placeholder = "First Name" })
            </div>
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.MiddleName, new { @class = "form-control", placeholder = "Middle Name" })
            </div>
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.LastName, new { @class = "form-control", placeholder = "Last Name" })
            </div>
            @Html.ValidationMessageFor(m => m.FirstName)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.SSN, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.SSN, new { @class = "form-control", placeholder = "Social Security Number", id = "ssn" })
                @Html.ValidationMessageFor(m => m.SSN)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.DOB, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.DOB, new { @class = "form-control", placeholder = "Date of Birth", id = "dob" })
                @Html.ValidationMessageFor(m => m.DOB)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.Email, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.Email, new { @class = "form-control", type = "email", placeholder = "Email Address" })
            </div>
            @Html.ValidationMessageFor(m => m.Email)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.PhoneNumber, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "Phone Number", id = "phone" })
            </div>
            @Html.ValidationMessageFor(m => m.PhoneNumber)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.Address1, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.Address1, new { @class = "form-control", placeholder = "Address 1" })
            </div>
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.Address2, new { @class = "form-control", placeholder = "Address 2" })
            </div>
            @Html.ValidationMessageFor(m => m.Address1)
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-3"></div>
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.City, new { @class = "form-control", placeholder = "City" })
                @Html.ValidationMessageFor(m => m.City)
            </div>
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.State, new { @class = "form-control", placeholder = "State" })
                @Html.ValidationMessageFor(m => m.State)
            </div>
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.Zip, new { @class = "form-control", placeholder = "Zip Code", id = "zip" })
                @Html.ValidationMessageFor(m => m.Zip)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.HousingPayment, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.HousingPayment, new { @class = "form-control", placeholder = "Housing Payment" })
                @Html.ValidationMessageFor(m => m.HousingPayment)
            </div>
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.HousingType, new { @class = "form-control", placeholder = "Housing Type" })
                @Html.ValidationMessageFor(m => m.HousingType)
            </div>
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(m => m.EmploymentType, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.EmploymentType, new { @class = "form-control", placeholder = "Employment Type" })
                @Html.ValidationMessageFor(m => m.EmploymentType)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.EmployerName, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.EmployerName, new { @class = "form-control", placeholder = "Employer Name" })
                @Html.ValidationMessageFor(m => m.EmployerName)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.EmploymentTitle, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.EmploymentTitle, new { @class = "form-control", placeholder = "Title" })
                @Html.ValidationMessageFor(m => m.EmploymentTitle)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.EmploymentStartDate, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.EmploymentStartDate, new { @class = "form-control", type = "date", placeholder = "Employment Start Date" })
                @Html.ValidationMessageFor(m => m.EmploymentStartDate)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.MonthlyIncome, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.MonthlyIncome, new { @class = "form-control", placeholder = "Monthly Income" })
                @Html.ValidationMessageFor(m => m.MonthlyIncome)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.AdditionalIncome, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.AdditionalIncome, new { @class = "form-control", placeholder = "Additional Income" })
                @Html.ValidationMessageFor(m => m.AdditionalIncome)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.AdditionalIncomeSource, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.AdditionalIncomeSource, new { @class = "form-control", placeholder = "Additional Income Source" })
                @Html.ValidationMessageFor(m => m.AdditionalIncomeSource)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.AdditionalIncomeAmt, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.AdditionalIncomeAmt, new { @class = "form-control", placeholder = "Additional Income Amount" })
                @Html.ValidationMessageFor(m => m.AdditionalIncomeAmt)
            </div>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.JointOwner, new { @class = "col-md-3 control-label" })
        <div class="col-md-9">
            <div class="col-md-4">
                <label>@Html.RadioButtonFor(m => m.JointOwner, new { @class = "form-control", value = "0" }, new { @checked = "" })&nbsp;No</label>
                <label>@Html.RadioButtonFor(m => m.JointOwner, new { @class = "form-control", value = "1" })&nbsp;Yes</label>
            </div>
        </div>
    </div>
    //Joint Applicant
    <div id="JointApplicantInfo">
        <h4>Joint Applicant Information</h4>
        <div class="form-group">
            @Html.LabelFor(m => m.JointFirstName, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointFirstName, new { @class = "form-control", placeholder = "First Name" })
                    @Html.ValidationMessageFor(m => m.JointFirstName)
                </div>
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointMiddleName, new { @class = "form-control", placeholder = "Middle Name" })
                </div>
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointLastName, new { @class = "form-control", placeholder = "Last Name" })
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointSsn, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointSsn, new { @class = "form-control", placeholder = "Social Security Number", id = "ssm" })
                    @Html.ValidationMessageFor(m => m.JointSsn)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointDob, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointDob, new { @class = "form-control", placeholder = "Date of Birth", id = "dob" })
                    @Html.ValidationMessageFor(m => m.JointDob)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointEmail, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointEmail, new { @class = "form-control", type = "email", placeholder = "Email Address" })
                </div>
                @Html.ValidationMessageFor(m => m.JointEmail)
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointPhoneNumber, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointPhoneNumber, new { @class = "form-control", placeholder = "Phone Number", id = "phone" })
                </div>
                @Html.ValidationMessageFor(m => m.JointPhoneNumber)
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointAddress1, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointAddress1, new { @class = "form-control", placeholder = "Address 1" })
                    @Html.ValidationMessageFor(m => m.JointAddress1)
                </div>
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointAddress2, new { @class = "form-control", placeholder = "Address 2" })
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-3"></div>
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointCity, new { @class = "form-control", placeholder = "City" })
                    @Html.ValidationMessageFor(m => m.JointCity)
                </div>
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointState, new { @class = "form-control", placeholder = "State" })
                    @Html.ValidationMessageFor(m => m.JointState)
                </div>
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointZip, new { @class = "form-control", placeholder = "Zip Code" })
                    @Html.ValidationMessageFor(m => m.JointZip)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointHousingPayment, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointHousingPayment, new { @class = "form-control", placeholder = "Housing Payment" })
                    @Html.ValidationMessageFor(m => m.JointHousingPayment)
                </div>
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointHousingType, new { @class = "form-control", placeholder = "Housing Type" })
                    @Html.ValidationMessageFor(m => m.JointHousingType)
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(m => m.JointEmploymentType, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointEmploymentType, new { @class = "form-control", placeholder = "Employment Type" })
                    @Html.ValidationMessageFor(m => m.JointEmploymentType)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointEmployerName, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointEmployerName, new { @class = "form-control", placeholder = "Employer Name" })
                    @Html.ValidationMessageFor(m => m.JointEmployerName)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointEmploymentTitle, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointEmploymentTitle, new { @class = "form-control", placeholder = "Title" })
                    @Html.ValidationMessageFor(m => m.JointEmploymentTitle)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointEmploymentStartDate, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointEmploymentStartDate, new { @class = "form-control", type = "date", placeholder = "Employment Start Date" })
                    @Html.ValidationMessageFor(m => m.JointEmploymentStartDate)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointMonthlyIncome, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointMonthlyIncome, new { @class = "form-control", placeholder = "Monthly Income" })
                    @Html.ValidationMessageFor(m => m.JointMonthlyIncome)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointAdditionalIncome, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointAdditionalIncome, new { @class = "form-control", placeholder = "Additional Income" })
                    @Html.ValidationMessageFor(m => m.JointAdditionalIncome)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointAdditionalIncomeSource, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointAdditionalIncomeSource, new { @class = "form-control", placeholder = "Additional Income Source" })
                    @Html.ValidationMessageFor(m => m.JointAdditionalIncomeSource)
                </div>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.JointAdditionalIncomeAmt, new { @class = "col-md-3 control-label" })
            <div class="col-md-9">
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.JointAdditionalIncomeAmt, new { @class = "form-control", placeholder = "Additional Income Amount" })
                    @Html.ValidationMessageFor(m => m.JointAdditionalIncomeAmt)
                </div>
            </div>
        </div>
    </div>
<div class="form-group">
    <div class="col-md-offset-3 col-md-9 ">
        <div class="col-md-4">
            <input type="submit" value="Continue" class="btn btn-default" />
            </div>
        </div>
</div>
}

asp.net MVC验证返回带有验证的新视图

如果我知道你想做的是,如果部分视图失败(模型状态),你想返回带有验证的部分视图,如果模型状态有效,你需要重定向或传递另一个视图。

如果你想做上面的场景,你可以做jquery和json 的组合

使用jquery(序列化表单)将表单提交到post方法,如果您想重定向到其他地方,则返回json结果

如果我错了,请纠正我。

好的,您已经步入正轨,只需尝试以下几步即可。

在你的控制器上设置一个条件,使你的模型状态有效或不

在控制器上,您需要返回json对象,该对象具有带参数的路由url。

控制器上

return Json(new{redirectToAction=Url.Action("ActionResult","Controller",new{Parameters=Parameters})});

您的jquery函数应该对于默认绑定,添加将url作为字符串传递给jquery函数。

函数SubmitForm(routUrl){

 var serializedForm = $("# YourFormName ").serialize();;
 $.ajax({
     url: routUrl, 
     cache: false,
     type: "POST",
     data: serializedForm,
     success: function (data) {

         if (data.redirectToAction) {
             window.location.href = data.redirectToAction;
         }
         else {
             $("#YourFormName").html(data);
         }

     }
 });

}

如果你需要更多的细节,请告诉我,希望这会对你有所帮助。