2012-01-15 45 views
0

我正在处理MVC POST/GET请求,但我观察到一些奇怪的行为。为什么我的表单不能正确发布?

我的表单在通过点击浏览器中的“保存”进行编辑后发布,但是当我收到请求后,所有属性都未定义。 CourseNameCourseCreditPts,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

你没有贴tblCourse类是如何定义的,但是从你的校验好像它有一个属性称为CourseName。您已经命名了应包含课程名称EditAbleCourseName的文本框,并且存在您的问题。对于默认的模型绑定,您必须将输入命名为与该类的属性相同的名称。这也适用于您的其他属性。

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

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

等等...

+0

这个问题就解决了。但在这期间出现了另一个问题。 CourseID(主键值不能从浏览器的POST请求中正确传输)并且CourseID为0.相反,它应该与当前编辑过程中的情况类似(必须为136)。由于我必须使用此ID更新模型重定向页面。 – Usman 2012-01-15 12:38:43

相关问题