【问题标题】:Value cannot be null or empty.\r\nParameter name: name值不能为 null 或为空。\r\n参数名称: name
【发布时间】:2016-04-25 06:07:34
【问题描述】:

当我转到 cshtml 页面时会出现此错误:

System.Web.Mvc.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

在我的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>

但另一方面,如果我在 @Html.Editor("PropertyModel") 中更改我的代码

它运行良好,没有发生错误。

更新:

在我的模型中:

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

【问题讨论】:

  • 向我们展示您的模型
  • 因为您没有将模型传递给视图。
  • 我将模型传递给视图@model TITHR.Models.Property.PropertyAssign
  • @Rob 检查更新部分
  • 可能Model是保留字

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


【解决方案1】:

我已经尝试过这种情况,这很奇怪,但是使用 @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

因此,可能的解决方案是:

  • 更改您使用的编辑器助手或
  • 更改您的属性标识符

【讨论】:

    【解决方案2】:

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

    在您的情况下,您没有将模型返回到视图,因此 ViewData.Modelnull 并引发异常。

    要解决这个问题,请使用强类型EditorFor(m =&gt; m.Model)(或TextBoxFor(m =&gt; m.Model),无论如何你都应该这样做。即使你没有将模型传递给视图,这仍然会生成正确的html而不会抛出例外。

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

    但最好还是传递模型,所以你的控制器方法应该是

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

    【讨论】:

    • 嗨斯蒂芬,读完这篇文章后,当我为可空的日期时间编写一个强类型的帮助程序时,就像@Html.TextBoxFor((model =&gt; model.TimeSheetWeekToDate.HasValue ? model.TimeSheetWeekToDate.Value.ToShortDateString() : string.Empty), new { @class = "datepicker TimeSheetWeekToDate" }) 我仍然得到名称为空的错误?
    • @transformer,您需要将其作为一个带有相关详细信息的新问题,但您不能在HtmlHelper 方法中使用条件语句作为表达式。而且你所展示的东西无论如何都没有意义 - 它只是@Html.TextBoxFor(m =&gt; m.TimeSheetWeekToDate, "{0:MM/dd/yyyy}", new { .... })
    【解决方案3】:

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

    @using projectNamespace.PropertyAssign 
    

    当你的某些属性使用编辑器时,你可以这样写

    @Html.EditorFor(m => m.PropertyName) 
    

    对于文本框

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

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多