mvc4 actionlink传递变量

时间:2013-07-02 13:33:11

标签: c# asp.net-mvc variables actionlink

所以我得到了这个正在研究的webproject,在4/5个视图中我正在使用

 @Html.ActionLink("Back to List", "Index", new { id=Model.ClientID})

所有观点都会让我回到我的列表中,而不是我的“创建新视图” 这也是唯一一个不加载的视图,给我一个“System.NullReferenceException”的例外

我很困惑为什么这是唯一一个不允许我将clientID传递给它的视图(因为我不仅需要它而且还需要CountyID来创建一个新的县,而且更多地告诉我它是空。

如果我删除上面的代码行,我的代码运行正常(显然将我的2个ID字段添加到创建视图中)这让我觉得它可能是我的控制器。

这是我从givin controller for create

的行动
    // GET: /County/Create
    public ActionResult Create()
    {
        return View();
    }

用于比较,这是同一控制器中的编辑操作

    public ActionResult Edit(int id = 0)
    {
        dbCounty countys = db.Countys.Find(id);
        if (countys == null)
        {
            return HttpNotFound();
        }
        return View(countys);
    }

我也尝试将此代码添加到创建新动作链接时,我收到此错误

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily         unavailable.
Most likely causes:

The directory or file specified does not exist on the Web server.
The URL contains a typographical error.
A custom filter or module, such as URLScan, restricts access to the file.

我在这里做错了什么......

我的项目建立在一个层次模型上,One Client Many Countys(如果您需要更多代码,请告诉我)

提前感谢。

提示

必须有一个原因(我的假设)为什么在删除这行代码时它起作用(所以它必须是这行代码?) - 必须是一种不同的传递方式(clientID的值为1) )

 @Html.ActionLink("Back to List", "Index", new { id=Model.ClientID})

需要编辑索引控制器:

    public ActionResult Index([Bind(Prefix="id")] int CID=0)
    {
        var clnt = db.Clients.Find(CID);

        if (clnt != null)
        { 
            return View(clnt);
        }

        return HttpNotFound();

     }

编辑:来自Countys Controller的新创建动作

    public ActionResult Create(int id=0)
    {
        dbCounty countys = db.Countys.Find(id);
        if (countys == null)
        {
            return HttpNotFound();
        }
        return View(countys);
    }

我也尝试过运行

    public ActionResult Create(int id=0)
      {
        dbClient Client = db.Clients.Find(id);
        if (Client == null)
        {
            return HttpNotFound();
        }
        return View(Client);
    }

(因为我传递的是clientID - 构建模型的方式,它应该在使用clientID(passedVariable)在数据库中创建这个新行时添加一个县id

3 个答案:

答案 0 :(得分:2)

您似乎没有将模型传递给“创建”视图。在Create控制器中,您需要类似下面的内容,其中Client是具有ClientID属性的对象。

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

编辑:

为了澄清,在您的“创建视图”中,模型为空,因为您没有在控制器中传递它。看一下有效的控制器,看看它传递给View的内容。你需要为Create做类似的事情。

答案 1 :(得分:1)

我会尽力总结你的问题。你说如果你删除

@Html.ActionLink("Back to List", "Index", new { id=Model.ClientID})

没有错误,当您的视图生成时会发生错误。这两个事实意味着99%的Model为空

答案 2 :(得分:0)

中查看
  

@ Html.ActionLink(“返回列表”,“索引”,新{id = Model.ClientID})

模型不为空,否则将获得空引用异常