2011-07-05 92 views
2

我已經在我的觀點如下:Html.HiddenFor與枚舉

@Html.HiddenFor(x => x.MeasurementUnitType) 

MeasurementUnitType是一個枚舉,它看起來像:

public enum MeasurementUnitType 
{ 
    Metric, Imperial 
} 

無論發生什麼事,以該枚舉在模型上,隱藏字段始終設置爲度量標準。

我也嘗試有它的編輯模板:

@using Ns.Domain.Models.Enums 
@model Ns.Domain.Models.Enums.MeasurementUnitType 
@{ 
    switch (Model) 
    { 
     case MeasurementUnitType.Metric: 
    <text> 
    @Html.Hidden("Metric", ViewData.TemplateInfo.FormattedModelValue) 
    </text> 
break; 
     case MeasurementUnitType.Imperial: 
    <text> 
    @Html.Hidden("Imperial", ViewData.TemplateInfo.FormattedModelValue) 
    </text> 
break; 
     default: 
throw new ArgumentOutOfRangeException(); 
    } 
} 

而是將輸出的隱藏字段作爲

<input id="NewTable_MeasurementUnitType_Metric" name="NewTable.MeasurementUnitType.Metric" type="hidden" value="Metric" /> 

<input id="NewTable_MeasurementUnitType_Imperial" name="NewTable.MeasurementUnitType.Metric" type="hidden" value="Imperial" /> 

分別

這慣於工作,因爲Id有枚舉的實際值以及Id中枚舉的名稱...

任何人有任何想法?

+1

爲了您的第二個例子你就不能傳遞相同的值作爲第一個參數'Html.Hidden'?因此保持隱藏的ID是相同的 –

+0

是的 - 現在就這樣做 - 那不會解決問題嗎? – iwayneo

+0

nope ...沒有工作..頭痛... – iwayneo

回答

1

試着做這樣的:

@Html.Hidden(ViewData.ModelMetadata.PropertyName, 
    ViewData.TemplateInfo.FormattedModelValue) 

你可能隨後也能夠擺脫沒有switch語句。

你也可能因爲明顯的MVC錯誤(不是這樣)而陷入犯規,在另一個SO whereby MVC will use ValueProvider-provided values from a POST request if you re-render the view上提到。

+0

yup - 刪除開關 - 工作治療..簡單和乾淨 – iwayneo

+0

@iwayneo - 好消息! –

+0

模型活頁夾不喜歡它 - 我認爲,因爲它提交只是「帝國」,而不是「MeasurementunitType.Imperial」...這是另一個問題,雖然 – iwayneo