2011-12-30 74 views
8

我有这样的模式:MVC 3编辑观点仅

public class ExchangeRate 
{ 
    [Key] 
    public int ExchangeRateID { get; set; } 
    [Required] 
    [Display(Name = "Currency:")] 
    public string Currency { get; set; } 
    [Required] 
    public decimal Rate { get; set; } 
} 

“创建”视图工作正常,但是当我在编辑看来,我只希望货币属性显示,而不是可编辑的。我应该怎么做?如果我为这个类创建另一个“仅供查看”模型,那么我将省略“Currency”属性,并且将无法显示它。

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>ExchangeRate</legend> 

    @Html.HiddenFor(model => model.ExchangeRateID) 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Currency) 
    </div> 
    <div class="editor-field"> 
     @Html.DisplayFor(model => model.Currency) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Rate) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Rate) 
     @Html.ValidationMessageFor(model => model.Rate) 
    </div> 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 

}

更改@ Html.EditorFor(型号=> model.Currency)至@ Html.DisplayFor(型号=> model.Currency)不起作用,因为模型的状态变为无效时,它回发给控制器。

回答

10

你可以在你的表单中添加

@Html.HiddenFor(model => model.Currency) 

然后用

@Html.DisplayFor(model=> model.Currency) 

显示货币属性的只读值。这种方式,当你发布的价值将在发布的模型中发送。

+0

这也可以与Twitter引导结合使用,例如,在视图中使用下面的代码:' @ Html.DisplayFor(m => m.ProductName)' – Manfred 2012-08-28 01:07:17

+1

用户可以不通过萤火虫等编辑read-olny字段吗? – Sami 2013-10-04 09:34:35

4

您正在寻找:

[HiddenInput(DisplayValue=true)] 

然后显示编辑器,而不是显示器(使用EditorFor)。

它显示值只读,但添加一个隐藏的输入,以使发布状态有效。

+0

用MVC 4尝试了这一点,但没有为我工作,导致隐藏只。 EditorFor()不显示任何内容。不过,我可能忽略了一些东西。我参加了为我工作的@mreyeros解决方案。 – Manfred 2012-08-28 01:10:09

3

显示货币,但不能编辑试图

@Html.Label("Currency", Model.Currency) 

,如果你还需要发布币值回控制器尝试

@Html.HiddenFor(m => m.Currency) 

我希望这有助于。

+0

谢谢,我用这个解决方案 – alpinescrambler 2011-12-30 18:47:27

+0

如果你喜欢我的解决方案,请投票支持:) – 2012-01-04 16:06:38