C# 对象字符串将不会显示在razor视图中
我在视图中有一个包含各种输入的表单,尽管其中一个输入不能为C# 对象字符串将不会显示在razor视图中,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我在视图中有一个包含各种输入的表单,尽管其中一个输入不能为null(TeacherName)。如果用户将此字段留空,则模型状态将无效,因此它们将被传递回HttpGet BookingForm操作(一些对象信息与用户一起传递;RollNumber,日期和验证消息) 当用户被传递回表单时,我需要在表单顶部的视图中显示ValidationMsg。虽然我无法在视图中显示消息。但是,ValidationMsg正在URL中传递,因为我可以在URL中看到这一点:0&ValidationMsg=Please%2
null
(TeacherName)
。如果用户将此字段留空,则模型状态将无效,因此它们将被传递回HttpGet BookingForm
操作(一些对象信息与用户一起传递;RollNumber
,日期
和验证消息
)
当用户被传递回表单时,我需要在表单顶部的视图中显示ValidationMsg
。虽然我无法在视图中显示消息。但是,ValidationMsg
正在URL中传递,因为我可以在URL中看到这一点:0&ValidationMsg=Please%20完成%20所有%20字段
有谁能告诉我,当用户返回重定向到操作
到预订表单
时,为什么视图中没有显示验证消息
我的控制器:
[HttpGet]
public ActionResult BookingForm(School model)
{
School school = db.Schools.First(m => m.RollNumber ==
model.RollNumber);
return View(school);
}
[HttpPost]
[ActionName("BookingForm")]
public ActionResult BookingFormPost(Booking model)
{
if (ModelState.IsValid)
{
db.Bookings.Add(model);
db.SaveChanges();
return RedirectToAction("Index","Home");
}
var newModel = new School();
newModel.RollNumber = model.RollNumber;
newModel.Date = model.Date;
string ValidateMsg = "Please complete all fields";
newModel.ValidationMsg = ValidateMsg;
return RedirectToAction("BookingForm", newModel);
}
public int Id { get; set; }
public string RollNumber { get; set; }
public string OfficialSchoolName { get; set; }
[Required(ErrorMessage = "A teacher name is required")]
public string TeacherName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
@model CampBookingSys.Models.School
@{
ViewBag.Title = "School Booking Form";
}
<h2>School Booking Form</h2>
<form asp-controller="School" asp-action="BookingForm" method="post">
<p>@Model.ValidationMsg</p>
<br />
<p>Please complete the following information</p>
<div>
<label for="RollNumber">School Roll Number:</label>
<br />
<input asp-for="Booking.Rollnumber" id="txtRoll" name="RollNumber"
value="@Model.RollNumber" />
</div>
<br />
<div>
<label for="Date">Choose Camp Date:</label>
<br />
<input asp-for="Booking.Date" id="txtDate" name="Date"
value="@Model.Date.Value.ToShortDateString()" />
</div>
<br />
<div>
<label for="OfficialSchoolName">School Name:</label>
<br />
<input asp-for="Booking.OfficialSchoolName" id="txtOfficialSchoolName"
name="OfficialSchoolName" value="@Model.OfficialSchoolName" />
</div>
<br />
<div>
<label for="TeacherName">Teacher Name:</label>
<br />
<input asp-for="Booking.TeacherName" id="txtTeacherName"
name="TeacherName" />
</div>
<br />
<div>
<label for="Email">Teacher Email:</label>
<br />
<input asp-for="Booking.Email" id="txtEmail" name="Email" />
</div>
<br />
<div>
<label for="PhoneNumber">Teacher Contact Number:</label>
<br />
<input asp-for="Booking.PhoneNumber" id="txtPhoneNumber"
name="PhoneNumber" value="@Model.PhoneNumber" />
</div>
<br />
<div>
<label for="Surveys">Would you like to take part in research surveys?
</label>
<br />
<input asp-for="Booking.Surveys" id="Surveys" name="Surveys"
type="checkbox" onclick="$(this).val(this.checked ? true : false)" />
</div>
<br />
<input type="submit" value="Submit" class="submit" />
</form>
我的型号:
[HttpGet]
public ActionResult BookingForm(School model)
{
School school = db.Schools.First(m => m.RollNumber ==
model.RollNumber);
return View(school);
}
[HttpPost]
[ActionName("BookingForm")]
public ActionResult BookingFormPost(Booking model)
{
if (ModelState.IsValid)
{
db.Bookings.Add(model);
db.SaveChanges();
return RedirectToAction("Index","Home");
}
var newModel = new School();
newModel.RollNumber = model.RollNumber;
newModel.Date = model.Date;
string ValidateMsg = "Please complete all fields";
newModel.ValidationMsg = ValidateMsg;
return RedirectToAction("BookingForm", newModel);
}
public int Id { get; set; }
public string RollNumber { get; set; }
public string OfficialSchoolName { get; set; }
[Required(ErrorMessage = "A teacher name is required")]
public string TeacherName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
@model CampBookingSys.Models.School
@{
ViewBag.Title = "School Booking Form";
}
<h2>School Booking Form</h2>
<form asp-controller="School" asp-action="BookingForm" method="post">
<p>@Model.ValidationMsg</p>
<br />
<p>Please complete the following information</p>
<div>
<label for="RollNumber">School Roll Number:</label>
<br />
<input asp-for="Booking.Rollnumber" id="txtRoll" name="RollNumber"
value="@Model.RollNumber" />
</div>
<br />
<div>
<label for="Date">Choose Camp Date:</label>
<br />
<input asp-for="Booking.Date" id="txtDate" name="Date"
value="@Model.Date.Value.ToShortDateString()" />
</div>
<br />
<div>
<label for="OfficialSchoolName">School Name:</label>
<br />
<input asp-for="Booking.OfficialSchoolName" id="txtOfficialSchoolName"
name="OfficialSchoolName" value="@Model.OfficialSchoolName" />
</div>
<br />
<div>
<label for="TeacherName">Teacher Name:</label>
<br />
<input asp-for="Booking.TeacherName" id="txtTeacherName"
name="TeacherName" />
</div>
<br />
<div>
<label for="Email">Teacher Email:</label>
<br />
<input asp-for="Booking.Email" id="txtEmail" name="Email" />
</div>
<br />
<div>
<label for="PhoneNumber">Teacher Contact Number:</label>
<br />
<input asp-for="Booking.PhoneNumber" id="txtPhoneNumber"
name="PhoneNumber" value="@Model.PhoneNumber" />
</div>
<br />
<div>
<label for="Surveys">Would you like to take part in research surveys?
</label>
<br />
<input asp-for="Booking.Surveys" id="Surveys" name="Surveys"
type="checkbox" onclick="$(this).val(this.checked ? true : false)" />
</div>
<br />
<input type="submit" value="Submit" class="submit" />
</form>
查看:
[HttpGet]
public ActionResult BookingForm(School model)
{
School school = db.Schools.First(m => m.RollNumber ==
model.RollNumber);
return View(school);
}
[HttpPost]
[ActionName("BookingForm")]
public ActionResult BookingFormPost(Booking model)
{
if (ModelState.IsValid)
{
db.Bookings.Add(model);
db.SaveChanges();
return RedirectToAction("Index","Home");
}
var newModel = new School();
newModel.RollNumber = model.RollNumber;
newModel.Date = model.Date;
string ValidateMsg = "Please complete all fields";
newModel.ValidationMsg = ValidateMsg;
return RedirectToAction("BookingForm", newModel);
}
public int Id { get; set; }
public string RollNumber { get; set; }
public string OfficialSchoolName { get; set; }
[Required(ErrorMessage = "A teacher name is required")]
public string TeacherName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
@model CampBookingSys.Models.School
@{
ViewBag.Title = "School Booking Form";
}
<h2>School Booking Form</h2>
<form asp-controller="School" asp-action="BookingForm" method="post">
<p>@Model.ValidationMsg</p>
<br />
<p>Please complete the following information</p>
<div>
<label for="RollNumber">School Roll Number:</label>
<br />
<input asp-for="Booking.Rollnumber" id="txtRoll" name="RollNumber"
value="@Model.RollNumber" />
</div>
<br />
<div>
<label for="Date">Choose Camp Date:</label>
<br />
<input asp-for="Booking.Date" id="txtDate" name="Date"
value="@Model.Date.Value.ToShortDateString()" />
</div>
<br />
<div>
<label for="OfficialSchoolName">School Name:</label>
<br />
<input asp-for="Booking.OfficialSchoolName" id="txtOfficialSchoolName"
name="OfficialSchoolName" value="@Model.OfficialSchoolName" />
</div>
<br />
<div>
<label for="TeacherName">Teacher Name:</label>
<br />
<input asp-for="Booking.TeacherName" id="txtTeacherName"
name="TeacherName" />
</div>
<br />
<div>
<label for="Email">Teacher Email:</label>
<br />
<input asp-for="Booking.Email" id="txtEmail" name="Email" />
</div>
<br />
<div>
<label for="PhoneNumber">Teacher Contact Number:</label>
<br />
<input asp-for="Booking.PhoneNumber" id="txtPhoneNumber"
name="PhoneNumber" value="@Model.PhoneNumber" />
</div>
<br />
<div>
<label for="Surveys">Would you like to take part in research surveys?
</label>
<br />
<input asp-for="Booking.Surveys" id="Surveys" name="Surveys"
type="checkbox" onclick="$(this).val(this.checked ? true : false)" />
</div>
<br />
<input type="submit" value="Submit" class="submit" />
</form>
@model CampBookingSys.Models.School
@{
ViewBag.Title=“学校预订表”;
}
学校预订表
@Model.ValidationMsg
请填写以下资料
学籍编号:
选择夏令营日期:
学校名称:
教师姓名:
教师电邮:
教师联络电话:
你愿意参加研究调查吗?
当您在
Post
操作中填充学校模型时,干杯。您不必使用重定向到操作
,而是使用返回视图
本身。它应该会起作用
在您的HttpGet
操作中,您正在重新填充学校模型,这就是重定向到操作
不起作用的原因
[HttpPost]
[ActionName("BookingForm")]
public ActionResult BookingFormPost(Booking model)
{
if (ModelState.IsValid)
{
db.Bookings.Add(model);
db.SaveChanges();
return RedirectToAction("Index","Home");
}
var newModel = new School();
newModel = db.Schools.First(m => m.RollNumber == model.RollNumber);
newModel.Date = model.Date;
string ValidateMsg = "Please complete all fields";
newModel.ValidationMsg = ValidateMsg;
return View("BookingForm", newModel);
}
为什么在提交表单时不检查此项?我不太确定如何正确执行。我试图在TeacherName标签下添加“@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(model=>model.TeacherName.ToHtmlString())”,但未能成功,如果您能针对我的情况快速回答如何正确操作,我将不胜感激:)感谢您的回复。我需要将一个学校模型传递到HttpGet操作中,而HttpPost操作需要一个预订模型。如果我使用returnview(model),那么它将返回不正确的模型(Booking而不是School)School=db.Schools.First(m=>m.RollNumber==model.RollNumber);school.ValidationMsg=ValidateMsg;返回视图(学校);为什么你不能在HttpPost本身中使用它呢?请查看我的更新答案,我还建议使用Html助手进行验证,这对于c#和asp.net来说是非常新的。您的解决方案很有效,非常感谢您的时间和帮助,所以您在视图中使用了学校模型,但在发布时您使用的是预订对象。如果预订模型和学校模型中的属性相同,asp.net将正确映射数据,即使您使用html帮助程序本身也是如此。如果属性不同,我将使用学校模型作为HTTP Post中的参数,然后在调用save方法之前将数据从学校模型映射到预订模型