ASP MVC - 模型是空的

时间:2016-09-19 10:21:12

标签: c# asp.net-mvc null

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

编辑: 例外详细信息

enter image description here

谢谢!

3 个答案:

答案 0 :(得分:1)

将隐藏的字段代码更改为对象作为模型

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

答案 1 :(得分:0)

谢谢@ freedomn-m,我觉得你是对的。 无论如何我想知道如何使用HiddenFor和Model作为单个对象(string / int),因为如果我使用我不能动态地设置id对吗?因为它不是一个asp控件,而是一个HTML控件。

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

<强> CSHTML

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

<强> CONTROLLER

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

<强> MODEL

public class FrontendModel
{
    public int categoryId { get; set; }
}
PS:如果有人知道如何使用单个对象(string或int)有型号请解释我,我真的很感激。谢谢!

答案 2 :(得分:-1)

DarkLink我想这是你的[GET]动作,id在执行时有一些价值吗?我认为它应该是这样的:

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

然后,如果您没有自己设置id,那么它将永远是0,并且您没有null例外。