2012-01-15 10 views
0

私は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

あなたはtblCourseクラスが定義されている方法を投稿しませんでしたが、あなたのバリデータから、財産を持っているように思えますCourseNameと呼ばれます。コース名EditAbleCourseNameを含むテキストボックスに名前を付けましたが、問題があります。デフォルトのモデル・バインディングの場合は、入力の名前をクラスのプロパティーと同じ名前にする必要があります。これはあなたの他の特性にもあてはまります。

あなたの入力の名前をクラスのプロパティと同じ名前に変更してみてください。この問題は解決され

+0

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

のように...。しかし、この間に別の問題が生じました。 CourseID(主キー値はブラウザのPOSTリクエストから正しく転送されません)、CourseIDは0です。代わりに、現在の編集コースの場合(136でなければなりません)のようにする必要があります。モデルをこのIDを使用してリダイレクトする必要があります。 – Usman

関連する問題