2012-03-20 11 views
-1

にPartialViewからモデルを渡すために、私はPaartialViewはこのように宣言している:送信ボタンをどのようにコントローラ

@model IEnumerable<mvc1.Models.ProjectDetailModel> 
@using (Html.BeginForm())   
<form method="get" action="EditProject" enctype="multipart/form-data"> 
<br /> 
<fieldset> 
    <legend>Project Detail</legend> 
@foreach (var item in Model) 
{ 
    <tr> 
     <th class="thdetail"> 
      Project Code 
     </th> 
     <td class="tddetail"> 
      @Html.DisplayFor(modelItem => item.projectCode) 
     </td> 
     <tr> 
     <th class="thdetail"> 
       Project Name 
     </th> 
     <td class="tddetail"> 
      @Html.DisplayFor(modelItem => item.projectName) 
     </td> 

     </tr> 
     <tr> 
      <th class="thdetail"> 
       Project Type 
      </th> 
      <td class="tddetail"> 
       @Html.DisplayFor(modelItem => item.projectType) 
      </td> 
     </tr> 
     <tr> 
      <th class="thdetail"> 
       Detailed Description 
      </th> 
      <td class="tddetail"> 
      <div style="height: 100px; width:700px; overflow: scroll"> 
       @Html.DisplayFor(modelItem => item.projectDescription) 
      </div> 
      </td> 
     </tr> 
    </table> 
</fieldset>  
<input type="submit" value="Edit" /> 
</form> 
} 

を、私はコントローラを呼び出していますが、それはコントローラになったときにモデルがありますコントローラーに戻されません。モデルをコントローラに戻すにはどうすればいいのですか。 iはモデルを取り込んで主キーを取得し、(別のビューに結果を返すために、ストアドプロシージャを呼び出しFLLを有するコントローラの主キー

あるModel.projectCode)

[HttpGet] 
    public ActionResult EditProject(ProjectDetailModel model) 
    { 
     DBController dbcontroller = new DBController(); 

     string l_user_name = SessionBag.Current.UserName; 
     Int64 l_project_code = model.projectCode; 

     if (dbcontroller.DBConnection()) 
     { 
      MySqlCommand command = new MySqlCommand("edit_projects", dbcontroller.conn); 
      command.CommandType = System.Data.CommandType.StoredProcedure; 

      // Input parameters for the insert_projects STORED PROC 
      command.Parameters.Add(new MySqlParameter("userName", SessionBag.Current.UserName)); 
      command.Parameters["@userName"].Direction = System.Data.ParameterDirection.Input; 
      // Output parameters for the view_sr_projects_detail STORED PROC    
      command.Parameters.Add(new MySqlParameter("projectName", MySqlDbType.LongText)); 
      command.Parameters["@projectName"].Direction = System.Data.ParameterDirection.Output; 

      command.Parameters.Add(new MySqlParameter("projectType", MySqlDbType.LongText)); 
      command.Parameters["@projectType"].Direction = System.Data.ParameterDirection.Output; 

      command.Parameters.Add(new MySqlParameter("projectDescription", MySqlDbType.LongText)); 
      command.Parameters["@projectDescription"].Direction = System.Data.ParameterDirection.Output; 
      try 
      { 
       MySqlDataReader rdr = command.ExecuteReader(); 

       var model1 = new ProjectDetailModel(); 

       while (rdr.Read()) 
       { 
        model1.projectCode = (Int64)(rdr["projectCode"]); 
        model1.projectName = rdr["projectName"].ToString(); 
        model1.projectType = rdr["projectType"].ToString(); 
        model1.projectDescription = rdr["projectDescription"].ToString(); 
       } 

       dbcontroller.conn.Close(); 

       return View(model1); 
      } 
      catch (MySql.Data.MySqlClient.MySqlException ex) 
      { 
       dbcontroller.conn.Close(); 

       ViewBag.Message = "Could not view your detail project. Error " + ex.Number + " has ocurred. Please try again or contact the system administrator."; 
       return View("Error"); 
      } 
     } 
     else 
     { 
      ViewBag.Message = "Could not connect to the database. Please try again or contact the system administrator"; 
      return View("Error"); 
     } 
    }   

マイモデルは次のようになります。

public class ProjectDetailModel 
{ 
    [Display(Name = "Project Code")] 
    public Int64 projectCode { get; set; } 

    [Display(Name = "User Name")] 
    public string srUserName { get; set; } 

    [Display(Name = "Project Name")] 
    public string projectName { get; set; } 

    [Display(Name = "Project Type")] 
    public string projectType { get; set; } 

    [Display(Name = "Project Requirement")] 
    public string projectDescription { get; set; } 
} 

public class ProjectDetailModelList : List<ProjectDetailModel> 
{ 
} 

おかげ Naren

+1

コントローラのコードを表示できますか? –

+0

パブリックActionResult EditProject(ProjectDetailModelモデル) { DBController dbcontroller = new DBController(); 文字列l_user_name = SessionBag.Current.UserName; Int64 l_project_code = model.projectCode; (dbcontroller.DBConnection()) –

+2

あなたの質問にこのコードを入れて、読みやすくしてください。また、いくつかのコードを表示することもできます。 –

答えて

1

ここでこれができます。以下は、単に部分コードである、あなたの例で収まるように、それを変更します。

コードビューで:

<button id="btnEdit" type="button">Edit</button> 

私はその後、(jQueryのが追加されていることを確認し、ボタンをクリックしてリスナーを追加するためにjQueryを使用)ビューへ:

<script> 

    $(document).ready(function() { 

      $('#btnEdit').click(function() { 
       window.location = '@Url.RouteUrl(new { action = "EditProject", projectCode = Model.projectCode })'; 
      }); 

    }); 

</script> 

あなたのアクションメソッド:

public ActionResult EditProject(int projectCode) 
{ 
    // Retrieve this specific project using this code 
    // Do what needs to be done to populate the required input fields on view 
} 

これはBEです私はそれを行うことが判明しました。

+0

こんにちは、フィードバックありがとうございます。私はそれを試みたが、JQueryの部分に問題がある:projectCode = Model.projectCode}) ';私がやったことは、これを回避しようとするために、私はfllを追加しました:@ {Int64 l_pCode = item.projectCode; }、私はそれを変数に配置し、次にこの変数をJqueryで:projectCode = l_pCode ..を使ってアクセスできると思っていますが、それはうまくいきません。これはどうすればできますか?ありがとうnaren –

+0

こんにちは、その作業:-) ..私はちょうど上記のコードでforeachループの内側にこれを追加し、これのように使用しました: '@ Url.RouteUrl(new {action = "EditProject"、projectCode = item。 projectCode}) ';ありがとうalot、naren –

+0

こんにちはBrendan、私はPartialView()から出てくるときにフォーマットの問題があるようです。上記の解決策は、任意の書式を変更しますか?理由は、PartialViewは、コントローラにVIEW()を呼び出すフィールドを送ります。 VIEW()は今や本当に私のスタイルシートから属性を取りません。それはそうですが、それは他のViews()とは異なります。これに関するアイデア?ありがとう –

0

MVCはあなたのcontroller.EditProject(ProjectDetailModel)アクション番目を呼び出しますバインドシステムは、ページに(またはクエリ文字列またはルートデータなどに)ポストされたデータからProjectDetailModelオブジェクトを作成しようとします。それはあなたのためのProjectDetailModelを作成し、移入するためには、次のものが必要です。フォームデータで一致する値を持つProjectDetailModel

  • 公に設定可能なプロパティの

    1. パラメータなしのコンストラクタ
    このフォームを掲載することにより

    public class ProjectDetailModel 
    { 
        public ProjectDetailModel() 
        { 
        } 
    
        public int ProjectId 
        { 
         get; 
         set; 
        } 
    } 
    

    ...あなたはそれがMVCによって取り込まれていることができます:

    だからProjectDetailModelあれば、このようになります

    <form method="get" action="EditProject" enctype="multipart/form-data"> 
        <input type="hidden" id="ProjectId" name="ProjectId" value="123" /> 
    </form> 
    

    編集

    あなたは質問に追加した余分なコードを見てみると、あなたは整理するためにいくつかのことがあります。

    1. @using (this.Html.BeginForm())がオープンformタグをレンダリングします - 手作業で書いたように、その行は必要ありません。

    2. this.Html.DisplayFor()を使用すると、プロパティ値が画面に表示されます。アクション内のパラメーターに値を設定する場合は、バインドシステムに値を指定する必要があります。 DisplayFor()の代わりにEditorFor()を使用すると、アクションに送信されるときに要求に含まれるようになります。

  • +0

    私のモデルは次のようになります:public class ProjectDetailModel { [Display(Name = "Project Code")] public Int64 projectCode {get;セット; } [Display(Name = "User Name")] パブリック文字列srUserName {get;セット; } [表示(名前= "プロジェクト名")] public string projectName {get;セット; } [表示(名前= "プロジェクトタイプ")] public string projectType {get;セット; } [表示(名前= "プロジェクト要件")] public string projectDescription {get;セット; } public class ProjectDetailModelList:List {} –

    +0

    コードを貼り付けないでください。読みにくく、すべてのコードを質問に入れてください。あなたはこのコードを読むことができますか? –

    +0

    申し訳ありませんが、今すぐ追加しました。ありがとう –

    関連する問題