【问题标题】:mvc4 actionlink passing variablemvc4 actionlink 传递变量
【发布时间】:2013-07-02 13:33:10
【问题描述】:

所以我得到了我正在处理的这个 web 项目,并且在 4/5 视图中我正在使用

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

除“创建新视图”外,所有视图都将我返回到我的列表 这也是唯一不加载的视图,给我“System.NullReferenceException”的例外

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

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

这是我从给控制器创建的操作

    // 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.

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

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

提前致谢。

提示:

必须有一个原因(我的假设)为什么在删除这行代码时它可以工作(所以它必须是这行代码??) - 必须是一种不同的传递方式(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();

     }

编辑:县控制器的新创建操作

    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

【问题讨论】:

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


    【解决方案1】:

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

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

    编辑:

    澄清一下,在您的 Create View 中,Model 为空,因为您没有在控制器中传递它。看看工作的控制器,看看它传递给视图的内容。您需要为 Create 执行类似的操作。

    【讨论】:

    • 好的。所以我在我的索引中放置了@Html.ActionLink("Create New", "Create"), new { CID = Model.ClientID}),我通过clientID是1,当我点击它时它会爆炸,而不是给我有机会进入县控制器的创建操作......虽然我确实改变了我的创建控制器,但只需几秒钟即可在上面进行编辑
    • 看起来你在正确的轨道上,但现在你在索引视图中将 id 作为“CID”传递,并在 Create 控制器中期望一个名为“id”的 int。如果您使它们相同,我认为这对您有用。
    • 天才,有点荒谬,你必须传递它期望的变量哈哈,但又一次来自 vb.net,它从来没有产生差异,谢谢@lily
    • 没问题,很高兴你成功了。这绝对不直观:)
    • 莉莉你介意跟我聊聊另一个我有(有点)与这个问题无关的问题吗?
    【解决方案2】:

    我会尝试总结您的问题。你说如果你删除

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

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

    【讨论】:

    • ... 好吧,让我检查一下我在那里传递的内容,但我几乎可以肯定我通过创建新操作链接传递了一个客户端 ID,以从初始索引视图创建视图。
    【解决方案3】:

    检查一下

    @Html.ActionLink("返回列表", "索引", new { id=Model.ClientID})

    模型不为空,否则会出现空引用异常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      相关资源
      最近更新 更多