문제

사용자가 클라이언트 항목을 작성하고 편집 할 수있는 UI를 담당하는 강력한 MVC보기 컨트롤이 있습니다. 나는 그들이 정의 할 수 있기를 원합니다 ClientId 창조시, 그러나 편집하지는 않지만 이것은 UI에 반영됩니다.

이를 위해 다음 줄이 있습니다.

<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, new 
 { @readonly = 
   (ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 
      ? "readonly" : "false") 
 } )
%>

내가 어떤 값을 부여 적 속성 ( "false"및 "" ")에게 제공하더라도 Firefox와 IE7은 입력 읽기 전용을 만듭니다. 이는 성가신 반 직관적입니다. 필요하지 않은 경우 속성을 완전히 삭제할 수있는 3 대리 운영자 기반 방법이 있습니까?

도움이 되었습니까?

해결책

힘든 문제 ... 그러나 당신이 readonly 속성, 당신은 다음과 같이 할 수 있습니다.

<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, 
  ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 
    ? new { @readonly =  "readonly" } 
    : null) 
%>

더 많은 속성을 정의하려면 두 가지 익명 유형을 정의하고 속성의 여러 사본을 가져야합니다. 예를 들어, 이와 같은 것 (어쨌든 마음에 들지 않음) :

ClientId.Length > 0 
  ? (object)new { @readonly = "readonly", @class = "myCSS" } 
  : (object)new { @class = "myCSS" }

다른 팁

몇 가지 속성을 정의하려면 조건부가 재조정합니다. 다른 속성을 복제하지 않고, 속성에 익명 유형 대신 사전을 사용할 수 있습니다.

예를 들어

Dictionary<string, object> htmlAttributes = new Dictionary<string, object>();
htmlAttributes.Add("class", "myCSS");
htmlAttributes.Add("data-attr1", "val1");
htmlAttributes.Add("data-attr2", "val2");
if (Model.LoggedInData.IsAdmin == false)
{
    htmlAttributes.Add("readonly", "readonly");
}


@:User: @Html.TextBoxFor(
    m => m.User,
    htmlAttributes)  

그리고 대안은 그것을 평범한 오래된 HTML로 방출하는 것입니다. 그렇습니다. 편집자는 당신이 당신이 틀렸다고 생각하게 만들 것입니다. 그러나 그것은 vs2008sp1에서 상당히 자주 발생하는 것 같습니다. 이 예제는 CTP5에서 완전히 낭비되는 것으로 보이는 확인란의 경우에 특히 조건부 속성을 방출하는 방법을 제공합니다.

<input type="checkbox" name="roles" value='<%# Eval("Name") %>' 
  <%# ((bool) Eval("InRole")) ? "checked" : "" %> 
  <%# ViewData.Model.IsInRole("Admin") ? "" : "disabled" %> />

팁 : 브라우저에서 요소를 읽거나 비활성화하는 Readonly/Disabled 속성의 존재만으로도 단순한 존재입니다.

@Html.TextBoxFor(x => x.Name, isReadonly ?(object) new { @readonly = true } : new { /*Some other attributes*/ })

나는 그것이되어야한다고 생각합니다

<%= ((bool) Eval("InRole")) ? "checked" : "" %> 

나병에 대신에 대답하십시오.

<%# ((bool) Eval("InRole")) ? "checked" : "" %> 

적어도 그것은 #와 함께 작동하지 않았지만 =에서 작동했습니다. 내가 잘못 했어? 어쨌든 팁에 감사드립니다 :)

$ (function () {$ ( [readOnly = 'false']). removeAttr ( "readOnly");});

나는 이것을 사용한다 :

   @Html.TextAreaFor(model => model.ComentarioGestor, comentarioGestor? new { @class = "form-control" } : new { @class = "form-control", @readonly = "readonly" } as object)

나는 위의 대부분의 제안을 시도했고 이제는 한 줄로 가장 간단한 곳에 도착했습니다. 두 가지 익명의 HTML 속성 객체를 "개체"유형으로 선언하여 객체를 결합하십시오.

@Html.TextBoxFor(m => m.Email, !isEdit ? new { id = "email_box" } : new { id = "email_box", @readonly = isEdit ? "readonly" : "false" } as object)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top