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 = "" }) No</label>
<label>@Html.RadioButtonFor(m => m.JointOwner, new { @class = "form-control", value = "1" }) 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>
}
如果我知道你想做的是,如果部分视图失败(模型状态),你想返回带有验证的部分视图,如果模型状态有效,你需要重定向或传递另一个视图。
如果你想做上面的场景,你可以做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);
}
}
});
}
如果你需要更多的细节,请告诉我,希望这会对你有所帮助。