代码之家  ›  专栏  ›  技术社区  ›  Nerd in Training

如何用模型刷新视图

  •  1
  • Nerd in Training  · 技术社区  · 6 年前

    我有一个表单,其中包含用户需要填写的许多字段。其中一个部分有一个文本框,用户可以放置一个引用号并单击下面的链接,以用大多数字段填充刷新视图。

    @Html.ActionLink("Copy", "CopyFrom", "Logistics", "",new { onclick = "this.href += '&val=' + document.getElementById('ExistingRefNumber').value;" })
    

    这是密码 CopyFrom ActionResult

            [HttpGet]
            public ActionResult CopyFrom(string val)
            {
                int id;
                if (int.TryParse(val, out id))
                {
                    var fromModel = new LogisticsModels();
                    fromModel = fromModel.GetLogisticsObject(id);
    
                    if (fromModel != null)
                    {
                        model = new LogisticsModels();
                        model = fromModel;
                        return View("Index", model);
                    }
                }
                return null;
            }
    

    这一切都很好,但我注意到地址栏中的URL已从

    Views/Logistics/Index
    

    Views/Logistics/CopyFrom&val=15551
    

    所以当用户单击提交按钮时,会出现一个错误,因为它找不到copyFrom视图。

    我需要做什么才能让它再次工作?

    编辑1 我做了以上的工作。上面的第二个问题是,我的表单有一个提交按钮,它应该调用索引(logistics model模型),但是它试图寻找logistics/copyFrom。此问题仅在用户单击上面所示的复制链接时发生。我不知道如何显式调用索引actionresult并传递模型。 .

    1 回复  |  直到 6 年前
        1
  •  4
  •   ADyson    6 年前

    我想问题是 CopyFrom&val=15551 - & 应该是 ? . 在HTTP URL查询字符串中, ? 表示查询字符串的开头,然后是第一个参数及其值。然后使用 & 但是 & 无效,无法开始查询字符串。

    例如

    CopyFrom?firstParam=1&val=15551
    

    是一种有效的发送方式 服务器的参数。

    在您的案例中,您只有一个参数,因此您希望以

    CopyFrom?val=15551
    

    只需要更改代码

    "this.href += '&val='
    

    "this.href += '?val='
    

    你应该没事的。(注意,URL仍将更改为copyFrom,但“index”视图代码将用于呈现响应,这非常好。)

    如果调试服务器端代码,您会发现错误的结果是 val 总是 null 在C中,因为.NET不能正确地从querystring读取参数(因为,正如我所解释的,querystring无效)。这将反过来导致你的胰蛋白酶失效,因此动作方法将返回 无效的 而不是“索引”视图。


    另外,你不应该真的从一个操作方法中返回空值——一个正确的处理方法是返回视图,但是显示一条错误消息——要么通过模型状态错误,要么仅仅是视图包中的一些自定义内容,甚至重定向到一个通用的错误页面(如果问题不可恢复的话)。你应该已经能够在网上找到很多这样的例子了。但你应该一直回来 某物 对于浏览器——毕竟,你听说过一个网页,如果你犯了一个小错误,它会变成空白,没有任何解释吗?