C# ASP MVC-模型为空

C# ASP MVC-模型为空,c#,asp.net-mvc,null,C#,Asp.net Mvc,Null,我试图从我的控制器到我的视图中获取一个整数值,然后将该值添加为一个隐藏字段,以便稍后在JavaScript客户端代码中使用 尝试添加隐藏字段时出现异常 以下是复制的步骤: 我的cshtml页面: @model Int32 @{ ViewBag.Title = "GetGeneric"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section DetailJavascript { @Scripts.Render("~/S

我试图从我的控制器到我的视图中获取一个整数值,然后将该值添加为一个隐藏字段,以便稍后在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 !! 
        }
编辑: 异常详细信息


谢谢大家!

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

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

然后,如果您没有自己设置
id
,它将始终是
0
,并且您没有
null
异常。

谢谢@freedomn-m,我认为您是对的。 无论如何,我想知道如何将HiddenFor与模型一起作为单个对象(string/int)使用,因为如果我使用,我无法动态地设置正确的id?因为它不是asp控件,而是html控件

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

CSHTML

@model MyNameSpace.Models.FrontendModel 
@Html.HiddenFor(model => model.categoryId, new { id = "DetailCategoryId" });
public class FrontendModel
{
    public int categoryId { get; set; }
}
控制器

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

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

PS:如果有人知道如何使用单一对象(字符串或int)的模型,请解释我,我会非常感激。谢谢

更改隐藏字段代码,使其与对象作为模型一起工作

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

什么例外?为什么要传递
对象而不是
int
(应该是
返回视图(id);
为什么要向上传递
id
?我很确定(没有选中,如果我错了请纠正我)当您使用
HiddenFor
时,它从
model=>model.property
中获取属性名称。由于您没有指定属性,属性名称为null,因此为您提供了“Value cannot null or empty”(值不能为null或空)。问题是您的模型是值类型,并且您不能在
公共静态MvcHt中使用值类型作为
TModel
mlString HiddenFor(…
您需要将属性包装到模型中,或者手动生成html LYFYI,错误将抛出到
私有静态MVCHTMLSING InputHelper(…
方法-引用(在页面底部)的第一行。您可以编写您的WIN扩展方法来解决itRead问题。.我添加了断点,id有值…谢谢'p'的值,但不向上转换到对象,只返回视图(id)