我正在处理MVC POST / GET请求,但我发现了一些奇怪的行为。
我的表单在编辑后点击"保存"从浏览器,但当我收到请求时,所有属性都是未定义的。 CourseName
,CourseCreditPts
,Institute
为空或零。
代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(tblCourse a_Course)
{
// Retrieve existing object
var CourseToBeSaved = _pr.FindCourseById(a_Course.CourseID);
// without try-catch exception thrown
try
{
TryUpdateModel(CourseToBeSaved);
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
// Save
_pr.Save();
return View();
}
和包含代码的.aspx
文件:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DataWarehouse.tblCourse>" %>
<%@ Import Namespace="DataWarehouse.Helpers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Edit
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Edit Course</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<%: Html.HiddenFor(x=>x.CourseID) %>
<table>
<tr>
<td><b>Institute</b></td>
<td><%: Html.DropDownList("InstituteID")%> <%: Html.ValidationMessageFor(x=>x.InstituteID) %></td>
</tr>
<tr>
<td><b>CourseName</b></td>
<td><%: Html.TextBox("EditAbleCourseName")%> <%: Html.ValidationMessageFor(x => x.CourseName)%></td>
</tr>
<tr>
<td><b>CreditPoints</b></td>
<td><%: Html.TextBox("EditAbleCreditPoints")%> <%: Html.ValidationMessageFor(x => x.CreditPts)%></td>
</tr>
<tr>
<td><b>Status</b></td>
<td><%: Html.DropDownList("EditAbleStatus")%> <%: Html.ValidationMessageFor(x => x.Status)%></td>
</tr>
</table>
<p>
<input type="submit" value="Save" />
</p>
<% } %>
</asp:Content>
答案 0 :(得分:0)
您没有发布如何定义tblCourse类,但是从您的验证器看来它似乎有一个名为CourseName的属性。您已命名应包含课程名称EditAbleCourseName的文本框,并且存在您的问题。对于默认模型绑定,您必须将输入命名为与类上的属性相同的名称。这适用于您的其他物业。
因此,请尝试将输入重命名为与班级属性相同的名称。
<%: Html.TextBox("CourseName")%>
依旧......