2017-12-19 24 views
0

私はコントローラに隠されたID値を渡す必要があります。だから私は次のように試みましたが、私は価値を得ています。asp.net mvc 3のコントローラに隠されたIdの値を渡す方法

cs.Html:

コントローラに @Html.HiddenFor(model => Model.DomainViews[i].DomainID, new { id = "hdnDomainID" })値を渡す方法
<ul id="tree" class="dd-list"> 
    @for (int i = 0; i < Model.DomainViews.Count(); i++) 
    { 
     <li class="dd-item"> 
      <a href="#"> 
       @Html.CheckBoxFor(model => model.DomainViews[i].IsChecked, new { @id = @Model.DomainViews[i].DomainID }) 
       <label for="@Model.DomainViews[i].DomainID">@Model.DomainViews[i].DomainName</label> 
       @Html.HiddenFor(model => Model.DomainViews[i].DomainID, new { id = "hdnDomainID" }) 
      </a> 
      <ul class="dd-list"> 
       <li class="dd-item"> 
        <a href="#"> 
         <input type="checkbox" id="2"> 
         <label for="2"> Level 2 - 1</label> 
        </a> 
        <ul class="dd-list"> 
         <li class="dd-item"> 
          <a href="#"> 
           <input type="checkbox" id="3"> 
           <label for="3"> Level 3 - 1</label> 
          </a> 
         </li> 
         <li class="dd-item"> 
          <a href="#"> 
           <input type="checkbox" id="4"> 
           <label for="4"> Level 3 - 2</label> 
          </a> 
         </li> 
        </ul> 
       </li> 
      </ul> 
     </li> 
    } 
</ul> 

:上記のコードで

public ActionResult RoleCreate() 
{ 
    userType type = new userType(); 
    List<DomainView> EmpList = type.GetAllRoleModulesViews(); 
    Role objBind = new Role(); 
    objBind.DomainViews = EmpList; 
    return View(objBind); 
} 

私はDOMAINIDの値を取得する方法..

public List<DomainView> GetAllRoleModulesViews() 
{ 
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Admin"].ConnectionString)) 
    { 
     List<DomainView> EmpList = new List<DomainView>(); 
     SqlCommand com = new SqlCommand("MEDEIL_DomainMaster_SelectAll", conn); 
     com.CommandType = CommandType.StoredProcedure; 
     SqlDataAdapter da = new SqlDataAdapter(com); 
     DataTable dt = new DataTable(); 

     conn.Open(); 
     da.Fill(dt); 
     conn.Close(); 
     foreach (DataRow dr in dt.Rows) 
     { 
      EmpList.Add(new DomainView 
      { 
       DomainID = Convert.ToInt32(dr["DomainID"]), 
       DomainCode = Convert.ToString(dr["DomainCode"]), 
       DomainName = Convert.ToString(dr["DomainName"]), 
       CreatedBy = Convert.ToInt32(dr["CreatedBy"] == DBNull.Value ? null : dr["CreatedBy"].ToString()), 
       CreatedDate = Convert.ToDateTime(dr["CreatedDate"]), 
       ModifiedBy = Convert.ToInt32(dr["ModifiedBy"] == DBNull.Value ? null : dr["ModifiedBy"].ToString()), 
       ModifiedDate = Convert.ToDateTime(dr["ModifiedDate"] == DBNull.Value ? null : dr["ModifiedDate"].ToString()) 
      }); 
     } 
     return EmpList; 
    } 
} 

モジュール:

public class DomainView 
{ 
    [Key] 
    public int DomainID { get; set; } 
    public string DomainCode { get; set; } 
    public string DomainName { get; set; } 
    public int TabOrder { get; set; } 
    public string UserName { get; set; } 
    public int CreatedBy { get; set; } 
    public DateTime CreatedDate = DateTime.UtcNow; 
    public int ModifiedBy { get; set; } 
    public DateTime ModifiedDate = DateTime.UtcNow; 
    public bool IsChecked { get; set; } 
    public IEnumerable<DomainView> DomainViews { get; set; } 
} 

答えて

0

私が好む最も簡単な方法は、エディタテンプレートと呼ばれるMVC機能を使用することです。正しいビューフォルダ(または共有フォルダ)内にサブディレクトリEditorTemplatesを作成する必要があります。DomainView.cshtmlを作成します。このファイルは、あなたのfor - ループの体に非常によく似たマークアップが含まれていますが、テンプレートは、単一の項目のみですのでDomainViews[i]でどこでも削除します:要素<ul id="tree" class="dd-list">が置かれているあなたのメインページ、内

@model DomainView // <-- you'll need your Namespace here of course 

<li class="dd-item"> 
    <a href="#"> 
    @Html.CheckBoxFor(model => model.IsChecked, new { @id = @Model.DomainID }) 
    <label for="@Model.DomainID">@Model.DomainName</label> 
    @Html.HiddenFor(model => Model.DomainID, new { id = "hdnDomainID" }) 
    </a> 
    ...... 
</li> 

、あなたのコードは次のようになります。

<ul id="tree" class="dd-list"> 
    @Html.EditorFor(model => model.DomainViews) 
</ul> 

MVCエディタテンプレートエンジンは、ポストバック時に、モデルバインダーは、アレイが正しく満たされることを保証します、あなたとの正しい名前を生成します。

+0

Id値をコントローラに渡すにはどうすればいいですか? –

+0

'HiddenFor'要素を使うのは適切なアプローチです。コントローラ全体に渡す(ポストメソッド)。ここでは、正しくバインドされたものもすべて読み込まれます – thmshd

関連する問題