【问题标题】:Problems using TextBoxFor with viewModels in MVC在 MVC 中使用带有 viewModel 的 TextBoxFor 的问题
【发布时间】:2012-07-07 18:46:16
【问题描述】:

我最近开始使用 viewModel。这是我正在使用的 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, System.Linq.Expressions.Expression>) 不能从用法中推断出来。尝试明确指定类型参数。

有人可以给我建议吗?

【问题讨论】:

  • 你能给我们看看 Content 类的代码吗?
  • 是的,请告诉我们 Content 类也有什么
  • 任何看到此评论的人,确保通过添加模型,我在 MVC 中首先使用 DB 并且没有生成模型并浪费时间。

标签: asp.net-mvc asp.net-mvc-3 razor viewmodel html.textboxfor


【解决方案1】:

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

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

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

@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 是什么。如果它不是一个字符串,那么这也将是一个问题。

【讨论】:

    【解决方案2】:

    确保OrderContent 上的公共 属性。现在我在实现POC 应用程序时遇到了这个异常。你猜怎么了?我忘了在我的 ViewModel 属性前添加 public specifier

    我有这个:

    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; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2019-10-10
      • 2011-08-01
      相关资源
      最近更新 更多