5

我最近开始使用 viewModel。这是我正在使用的视图模型:

public class ContentViewModel
    {
        public Content Content { get; set; }
        public bool UseRowKey { 
            get {
                return Content.PartitionKey.Substring(2, 2) == "05" ||
                   Content.PartitionKey.Substring(2, 2) == "06";
            }
        }
        public string TempRowKey { get; set; }

    }

我改变了我的剃刀观点:

@model WebUx.Content

<div class="colx2-left">
    <label for="complex-fr-url" class="required">Order</label>
    @Html.TextBoxFor(model => model.Order)
</div>

至:

@model WebUx.Areas.Admin.ViewModels.Contents.ContentViewModel

<div class="colx2-left">
    <label for="complex-fr-url" class="required">Order</label>
    @Html.TextBoxFor(model => model.Content.Order)
</div>

现在我的观点因以下消息而失败:

编译器错误消息:CS0411:方法 System.Web.Mvc.Html.InputExtensions.TextBoxFor TModel,TProperty> 的类型参数(System.Web.Mvc.HtmlHelper<TModel>,System.Linq.Expressions.Expression<System.Func< TModel,TProperty>>) 不能从用法中推断出来。尝试明确指定类型参数。

有人可以给我建议我应该做什么吗?

4

2 回答 2

2

根据经验,我确保我的视图/模板只引用它正在处理的模型中的一个属性,而不是下面的一个。

您在更改之前的第一次尝试是正确的。

因此,我会将您的视图更改为以下内容:

@model WebUx.Areas.Admin.ViewModels.Contents.ContentViewModel
@Html.EditorFor(model => model.Content)

并利用您现有的模板:

@model WebUx.Content
<div class="colx2-left">
    <label for="complex-fr-url" class="required">Order</label>
    @Html.TextBoxFor(model => model.Order)
</div>

我也不知道是什么Order。如果它不是一个字符串,那么这也将是一个问题。

于 2012-09-21T01:44:40.467 回答
1

确保Order是 上的公共财产Content。现在我在实现POC应用程序时遇到了这个异常。你猜怎么着?我忘记在我的 ViewModel 属性前面添加公共说明符。

我有这个:

public class UserViewModel
{
    [StringLength(16)]
    string Name { get; set; }

    [Range(18, 65)]
    int Age { get; set; }
}

然后在这里抛出了同样的异常。

我这样做是为了解决问题:

public class UserViewModel
{
    [StringLength(16)]
    public string Name { get; set; }

    [Range(18, 65)]
    public int Age { get; set; }
}
于 2013-08-29T21:42:16.207 回答