值不能为null或为空。\ r \ n参数名称:name

时间:2016-04-25 06:07:34

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

当我转到cshtml页面时,会发生此错误:

  

类型' System.ArgumentException'的例外情况发生在System.Web.Mvc.dll中但未在用户代码中处理

在我的cshtml代码中:

<div class="form-group">
     @Html.Label("Model", new { @class = "control-label col-md-4" })
  <div class="col-md-8">
     @Html.Editor("Model")
  </div>
</div>

enter image description here

但另一方面,如果我在@Html.Editor("PropertyModel")

中更改我的代码

它完美运行没有错误发生。

UPDATE:

在我的模型中:

public class PropertyAssign {
        public int PropertyAssignId { get; set; }

        public string PropertyName { get; set; }

        public string Model { get; set; }


        public DateTime AssignDate { get; set; }
    }

在我的控制器中:

 public ActionResult Create()
    {
      return View();
    }

3 个答案:

答案 0 :(得分:3)

我尝试过这种情况并且非常奇怪,但使用@ Html.Editor()帮助程序时,Model属性的标识符存在一些问题。

@Html.Editor("Model") // throws an exception
@Html.EditorFor(m => m.Model) // works fine

也许在这种情况下,Model的含义是整个模型,它被传递给视图,而不是单个属性。但是当我将Model属性的标识符更改为其他属性时,例如SomeModel,一切都很好。

@Html.Editor("SomeModel") // works fine
@Html.EditorFor(m => m.SomeModel) // works fine

所以,可能的解决方案是:

  • 更改您使用的编辑助手或
  • 更改您的媒体资源标识

答案 1 :(得分:2)

抛出异常的原因是HtmlHelpers检查ViewData以获取要绑定的值。 ViewData类型为ViewDataDictionary,其中包含属性Model(您传递给视图的模型)。

在您的情况下,您不会将模型返回到视图,因此ViewData.Modelnull并抛出异常。

要解决此问题,请使用强类型EditorFor(m => m.Model)(或TextBoxFor(m => m.Model),无论如何都应该这样做。即使您没有将模型传递给视图,这仍然会生成正确的没有抛出异常的HTML。

<input type="text" name="Model" id="Model" value="" />

但无论如何都是传递模型的最佳做法,所以你的控制器方法应该是

public ActionResult Create()
{
  return View(new PropertyAssign());
}

答案 2 :(得分:0)

使用您的模型名称在顶部写

@using projectNamespace.PropertyAssign 

当您使用某个属性的编辑器时,您可以像

一样编写
@Html.EditorFor(m => m.PropertyName) 

用于文本框

@Html.TextBoxFor(model => Model.PropertyAssign , new { @class = "release-prefix" @id = "prefix" })