为什么我的表单没有正确发布?

时间:2012-01-15 10:56:50

标签: asp.net-mvc c#-4.0 html-helper

我正在处理MVC POST / GET请求,但我发现了一些奇怪的行为。

我的表单在编辑后点击"保存"从浏览器,但当我收到请求时,所有属性都是未定义的。 CourseNameCourseCreditPtsInstitute为空或零。

代码:

[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>

1 个答案:

答案 0 :(得分:0)

您没有发布如何定义tblCourse类,但是从您的验证器看来它似乎有一个名为CourseName的属性。您已命名应包含课程名称EditAbleCourseName的文本框,并且存在您的问题。对于默认模型绑定,您必须将输入命名为与类上的属性相同的名称。这适用于您的其他物业。

因此,请尝试将输入重命名为与班级属性相同的名称。

<%: Html.TextBox("CourseName")%>

依旧......