2012-10-18 44 views
4

如果設置了某個變量,我希望某個字段是文本框,如果不是,我希望該字段只顯示該值,但該值不可編輯。如果其他邏輯在Razor DisplayFor vs TextBoxFor MVC4

我把一些如果其他邏輯到我的意見和價值將不會顯示。我在這裏錯過了什麼嗎?

  @{ 
       if (isFlagSet) { 
        Html.TextBoxFor(m => m.HostpitalFinNumber, new { @Value = Model.HostpitalFinNumber }); 
        Html.ValidationMessageFor(m => m.HostpitalFinNumber); 
       } 
       else { 
        Html.DisplayTextFor(m => m.HostpitalFinNumber); 
       } 
      } 

更新...

我改變了我的代碼

  @if (isFlagSet) { 
        Html.TextBoxFor(m => m.HostpitalFinNumber); 
        Html.ValidationMessageFor(m => m.HostpitalFinNumber); 
      } 
      else { 
        Html.DisplayFor(m => m.HostpitalFinNumber); 
      } 

以下是正在生成的HTML。注意輸入值是如何寫入手機而不是醫院的。很確定爲什麼會這樣。

<tr><td> 
     <label for="Phone">Phone</label> 
     </td> 
     <td> 
     <input Value="4124880798" id="Phone" name="Phone" type="text" value="4124880798" /> 
    </td></tr> 
    <tr><td> 
     <label for="HostpitalFinNumber">HostpitalFinNumber</label>    
     </td> 
     <td> 

    </td></tr> 

ANSWER

我忘了把@我的HTML輔助面前,擺脫了分號。

+0

DisplayFor默認情況下不會創建輸入標籤。如果您想要輸入,請使用另一個TextboxFor。 –

回答

9

你的剃鬚刀的語法是錯誤的,正確的語法是(你不需要周圍@{ }):

@if (isFlagSet) { 
    @Html.TextBoxFor(m => m.HostpitalFinNumber) 
    @Html.ValidationMessageFor(m => m.HostpitalFinNumber) 
} 
else { 
    @Html.DisplayTextFor(m => m.HostpitalFinNumber) 
} 

的HTML輔助不直接寫入響應(除了其中一個名稱的開始與Render),因此您需要使用@將生成的HTML寫入輸出。

請注意,您不需要手動設置表達式new { @Value = Model.HostpitalFinNumber }的值,因爲Html.TextBoxFor會照顧它。

+0

優秀的眼睛。我甚至沒有看到。我現在正在測試,只要我3分鐘後,我會發布這個答案。其實我什麼也沒有得到。嗯。其他東西必須是一隻腳。我將用我的發現更新我的帖子 – SoftwareSavant

+0

我忘了將@添加到我的html中並刪除分號。謝謝。 – SoftwareSavant