使用int模型的MVC局部视图抛出异常

时间:2013-08-21 10:33:19

标签: c# asp.net-mvc-3

我创建了一个部分视图,允许使用jQuery spinner插件更新int。这显示在qtip工具提示中。

@model int
    ...
@Html.TextBoxFor(x => x, new { @class = "spinner" })

和控制器操作:

[HttpGet]
public PartialViewResult TaskPriority(int id)
{
    var task = Task.Get(id);
    return PartialView("TaskPriority", task.Priority);
}

当我从我的页面调用动作时,我得到:

  

值不能为null或为空。参数名称:名称

TextBoxFor行抛出异常。

那么我在这里做错了什么,为什么这是错的?我是不是太复杂了?

3 个答案:

答案 0 :(得分:3)

查看引擎尝试检索文本框的名称。通常,它是从用作文本框源的属性的名称构造的。请注意MSDN上描述TextBoxFor的第一个参数:

  

表达

     

标识包含该对象的对象的表达式   要渲染的属性。

在这种情况下,没有属性,因此没有任何东西可以从中获取名称。

要解决此问题,您可以使用Html.TextBox并明确指定名称:

@Html.TextBox("priority", Model, new { @class = "spinner" })

答案 1 :(得分:1)

好吧,我真的怀疑使用原始类型作为模型的一些问题。

你可以做到

@model Task

@Html.TextBoxFor(x => x.Priority, new{@class="spinner"})

并在您的控制器中

return PartialView("TaskPriority", task);

解决方案2: 使用ViewModel,只有一个整数属性。

答案 2 :(得分:0)

试试这个,

<强>模型

  public class RegisterModel
    {
        public int ID { get; set; }
}

查看

@model RegisterModel

@Html.TextBoxFor(x => x.ID, new { @class = "spinner" })


or
@Html.TextBox("ID",null, new { @class = "spinner" })

<强>控制器

[HttpGet]
public PartialViewResult TaskPriority(int ID)
{
    var task = Task.Get(ID);
    return PartialView("TaskPriority", task );
}