2017-12-19 4 views
0

컨트롤러에 숨겨진 ID 값을 전달해야합니다. 그래서 나는 다음과 같은 방법으로 노력했지만 가치를 얻고 있습니다.숨겨진 ID 값을 컨트롤러에 asp.net mvc 3 전달하는 방법

cs.Html :

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

어떻게 컨트롤러에 @Html.HiddenFor(model => Model.DomainViews[i].DomainID, new { id = "hdnDomainID" }) 값을 전달하기 :

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 -loop의 몸에 매우 유사 마크 업을 포함하는 것이지만, 템플릿은 단일 항목이므로와 DomainViews[i] 사방 제거 : 메인 페이지 내에서

@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">가 배치 당신의 코드는 다음과 같습니다

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

MVC의 편집기 템플릿 엔진은 다시 게시 할 때, 모델 바인더가 배열이 올바르게 작성되었는지 확인됩니다 및 대한 올바른 이름을 생성합니다.

+0

컨트롤러에 Id 값을 전달하는 방법은 무엇입니까? –

+0

'HiddenFor' 요소를 사용하는 것이 올바른 접근법입니다. 전체 Model을 컨트롤러에 전달합니다 (post 메소드). – thmshd

관련 문제