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方法之前将数据从学校模型映射到预订模型