2010-01-19 6 views
3
public class Foo { public bool Checked {get;set;}} 

보기 :ASP.NET MVC 2 강력한 형식의 Html 헬퍼, 인덱스

<viewdata model="Foo[] fooList" /> 
<for each="var f in fooList"> 
    ${Html.CheckBoxFor(x=>x[fIndex].Checked)} 
</for> 

윌 출력 :

<input id="Checked" name="Checked" type="checkbox" value="true" /> 
<input name="Checked" type="hidden" value="false" /> 

<input id="Checked" name="Checked" type="checkbox" value="true" /> 
<input name="Checked" type="hidden" value="false" /> 

<input id="Checked" name="Checked" type="checkbox" value="true" /> 
<input name="Checked" type="hidden" value="false" /> 

문제가 System.Web.Mvc.ExpressionHelper.GetExpressionText가 ID/이름에 인덱스를 포함하지 않습니다.

모든 체크 상자에 레이블을 추가하려는 경우 (모든 ID가 동일하기 때문에) 문제가 발생합니다.

어떻게하면 제대로 처리 할 수 ​​있습니까? MVC의 소스에서


=>

while (part != null) { 
      if (part.NodeType == System.Linq.Expressions.ExpressionType.MemberAccess) { 
       MemberExpression memberExpressionPart = (MemberExpression)part; 
       nameParts.Push(memberExpressionPart.Member.Name); 
       part = memberExpressionPart.Expression; 
      } 
      else { 
       //arghhhh... [index] != MemberAccess :(
       break; 
      } 
     } 

답변

0

당신이 HTML 속성을 지정할 수 있습니다 CheckBoxFor 과부하 사용 : 예를 들어

CheckBoxFor(TModel)(HtmlHelper(TModel), Expression(Func(TModel, Boolean)), IDictionary(String, Object)) 

,

${Html.CheckBoxFor(x => x[fIndex].Checked, new { id = "foo" + fIndex) })} 
+1

** 제대로 ** 아닙니다. 이 경우 - 하드 코딩 된 문자열을 엉망으로 만들지 않고도 뷰 모델에서 해당 ID를 다시 가져올 수 없으면 'CheckBoxFor'의'강력한 형식의 '도우미 메서드의 이점을 묻습니다. 이것은 $ {Html.CheckBox ("foo"+ fIndex, m.AllCatalogs [i] .Checked)}'를 사용하는 것과 동일합니다. –

+0

@Arnis L. 동의합니다. – Brettski

관련 문제