2011-04-22 2 views
1

EditorFor와 같은 것을 원합니다.이 표현식이 가리키는 각 속성에 대한 양식을 생성합니다. 현재의 비헤이비어는 단일 숨겨진 입력을 생성하고 ToString() 값을 값으로 사용하는 것입니다. 나는 각각의 속성에 대해 숨겨진 입력 세트를 만들고 싶습니다. 값이 프리미티브 값이 아니면 차례로 여러 개의 숨겨진 입력으로 나눠야합니다. 이렇게하면 한 동작에서 다른 동작으로 모델을 전달할 수 있습니다.재귀 HiddenFor를 수행하는 쉬운 방법이 있습니까?

나는 그것을 돕기 위해 썼다. 그러나 그것은 이미 있어야 할 것처럼 보인다. 다른 사람이 유용하다고 생각한 경우 도우미가 있습니다.

public static MvcHtmlString MultipleHiddenFor<TModel, TProperty> 
    (this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
{ 
    var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); 
    return MultipleHiddenHelper(helper, metadata, ExpressionHelper.GetExpressionText(expression)); 
} 

private static MvcHtmlString MultipleHiddenHelper<TModel>(HtmlHelper<TModel> helper, ModelMetadata metadata, string expression) 
{ 
    var bldr = new StringBuilder(); 
    foreach (var value in metadata.Properties) 
    { 
     var propexpression = expression + "." + value.PropertyName; 
     if (value.IsComplexType) 
     { 
      var propmetadata = ModelMetadata.FromStringExpression(propexpression, helper.ViewData); 
      bldr.Append(MultipleHiddenHelper(helper, propmetadata, propexpression)); 
     } 
     else 
     { 
      bldr.Append(helper.Hidden(helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(propexpression), 
              value.Model)); 
     } 
    } 

    return new MvcHtmlString(bldr.ToString()); 
} 

답변

0

나는이 나쁜 솔루션입니다 생각하지 않습니다하지만 당신은 당신이 (아마 데이터베이스 관련 객체)를하고있는 것처럼 완전히 객체를 출력하는 경우 당신이 열려 자신을두고 있다는 것을 알고 있어야합니다 이러한 요소가 공중 납치 된 것입니다.

누군가는 이러한 숨겨진 필드의 값을 변경할 수 있으며 (의도하지 않은 변경 사항) 잠재적으로 데이터베이스에 업데이트되거나 삽입되어 의도하지 않은 작업이 변경 될 수 있음을 의미합니다.

+0

이전 양식의 모든 사용자 데이터이며 이후 조치에 의해 유효성이 검사되므로 확인하겠습니다. – Timbo

관련 문제