2014-09-17 1 views
0

ViewData을 사용하여 부분 뷰에 매개 변수를 전달하는 상황이 있는데 가끔 일 때 매개 변수가 전달 될 필요가 없습니다. 그 상황에서, 나는 단지 그것이 디폴트로 되돌아 가기를 원할 뿐이다."ViewData"내에서 논리적 "OR"을 사용하려고 시도

그래서 실제보기 은 일반적으로는 작동, 놀랍게도 ...

<div> 
    @Html.Partial("templates/form/slots", new ViewDataDictionary { { "slots", "First.Slots" } }) 
</div> 

과 같은 모습을 렌더링되고 그 다음 부분

...

<div class="form-group"> 
    <h3>Slots</h3> 
    <!-- lots of other happy HTML --> 
    <select ng-model="@ViewData["slots"]"></select> 
</div> 

를 다음과 같이 보입니다 잘 됐네. 그러나 || 구문으로 약간의 걸림돌이 있습니다. ViewData에 값을 지정하지 않으면 기본값 인 "Model.Slots"으로 폴백하고 싶습니다. 나는 ... 그만큼 쉬울 것이다

<select ng-model="@(ViewData["slots"] || "Model.Slots")"></select> 

생각하지만 그

'||'... 오류를 인용, 작동하지 않습니다 'object'및 'string'의 인스턴스에는 연산자를 적용 할 수 없습니다.

나는 가깝다는 것을 알고있다. 나는 면도기에 관한 정확한 문법으로 고심하고있다. 컨버팅없이 전체 크기의 확장 메서드를 사용하지 않고 이러한 종류의 식을 얻을 수있는 방법이 있습니까?

+0

의 결과로'||'를 병합하는 null 연산자 '??'를 사용하거나 부울입니다. (두 피연산자 모두 호환 가능한 유형이어야하므로 객체를 형 변환 할 수 있습니다. 필요한). 그래서'viewdata [ "slots"] ?? "Model.Slots". 넌 캐스팅 할 필요가 없어. Coalescing null은 첫 번째 Null이 아닌 값을 선택합니다. – Charleh

답변

1

당신이 찾고있는 것은 null coalescing operator이며 논리적 인 것이 아닙니다.

는 부울 피연산자를 기대하기 때문에 C#의 입력 시스템이 그것을 허용하지 않는 구조 object || default가 법적 자바 스크립트 (및 기타 동적 언어), 달리
<select ng-model="@(ViewData["slots"] ?? "Model.Slots")"></select> 

. ?? 연산자는 원하는대로 수행하지만 첫 번째 연산자가 null 인 경우 두 번째 피연산자로 돌아갑니다.

+0

예! 그것은 하나입니다! 고맙습니다. 11 분 타이머가 끝나면 즉시 크레딧을 발급합니다. 나는 면도기 문법을 훼손하고있었습니다. 면도기에서'@'와 괄호의 조합을 언제 사용해야 하는지를 기억하는 것은 꽤 혼란 스럽습니다. – Ciel

+0

내가 원하는 이유는 여러 부분에서 다시 사용하기 때문에 구성 요소를 분할하는 데 부분 뷰를 많이 사용하기 때문입니다. 대부분의 경우, 모델의 루트를보고 싶지만, 중첩 된 구조에서 위젯 중 일부를 사용해야하는 상황이 발생했습니다. 따라서 선택적으로이 중첩 된 구조를 정의 할 수 있어야합니다. 부분 뷰의 특정 렌더링을위한 "루트". 이것은 완벽하게 작동했습니다! – Ciel

+0

이제 내가 그렇게 말하지만, 내가 원하는 것처럼 그렇게 작동하지는 않는다. 그러나 그것은 다른 질문입니다. 2 분 안에 내가 이걸 인정할 때까지. 다시 한번 감사드립니다. – Ciel

관련 문제