【问题标题】:ASP MVC - Model is NullASP MVC - 模型为空
【发布时间】:2017-01-27 00:02:40
【问题描述】:

我试图从我的控制器获取一个整数值到我的视图中,然后将该值添加为隐藏字段,以便稍后在我的 JavaScript 客户端代码中使用。

我在尝试添加隐藏字段时遇到异常。

重现步骤如下:

我的 cshtml 页面:

@model Int32 
@{
    ViewBag.Title = "GetGeneric";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@section DetailJavascript
{
    @Scripts.Render("~/Scripts/Generic.js")
}

@Html.HiddenFor(model => model, new { id = "GenericID" });

<h2>GetGeneric</h2>

这是我的控制器代码:

public ActionResult GetCategoryDetail(int id)
        {

            Object p = id;

            return View(p);   //I added a breakpoint here and the value of variable 'p' is not null !! 
        }

编辑: 异常详情

谢谢!

【问题讨论】:

  • 什么异常?还有你为什么要通过object 而不是int(应该只是return View(id);
  • 你为什么要升级id
  • 当您使用HiddenFor 时,我很确定(未检查,如果我错了请纠正我)它从model =&gt; model.property 获取属性名称。由于您没有指定属性,因此属性名称为 null,为您提供“值不能为 null 或为空”
  • 问题是你的模型是一个值类型,你不能使用值类型作为public static MvcHtmlString HiddenFor&lt;TModel, TProperty&gt;(...中的TModel你需要将属性包装在模型中,或者手动生成html
  • 仅供参考,错误出现在private static MvcHtmlString InputHelper(... 方法的第一行 - 请参阅source code(在页面底部)。您可以编写您赢得的扩展方法来解决它

标签: c# asp.net-mvc null


【解决方案1】:

DarkLink 我想这是您的[GET] 操作,那么id 在执行时是否有一些价值?我认为它应该是这样的:

public ActionResult GetCategoryDetail(int id = 0)
{
   return View(id);   
}

那么,如果您不自己设置id,它将始终为0,并且您没有null 异常。

【讨论】:

  • 阅读问题..我加了断点,id有价值...谢谢
  • 'p' 的值,但不强制转换为 Object,只需返回 View(id)
【解决方案2】:

谢谢@freedomn-m,我认为你是对的。 无论如何,我想知道如何将 HiddenFor 与 Model 作为单个对象(字符串/整数)一起使用,因为如果我使用我不能动态地设置 id 吗?因为它不是一个asp控件,而是一个html控件。

我使用以下解决方案修复了它(我试图避免使用模型类,因为我实际上只是单个 int/string id 属性)。

CSHTML

@model MyNameSpace.Models.FrontendModel 
@Html.HiddenFor(model => model.categoryId, new { id = "DetailCategoryId" });

控制器

public ActionResult GetCategoryDetail(int id)
{
    return View(new FrontendModel() { categoryId = id});
}

型号

public class FrontendModel
{
    public int categoryId { get; set; }
}

PS:如果有人知道如何使用具有模型的单个对象(字符串或 int),请解释一下,我将不胜感激。谢谢!

【讨论】:

    【解决方案3】:

    将您的隐藏字段代码更改为与 object as model

    一起使用
    @Html.Hidden("GenericID",Model==null?string.Empty:Model.ToString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2022-01-13
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多