【问题标题】:Strange querystring 'almost' duplication of elements奇怪的查询字符串“几乎”重复元素
【发布时间】:2015-11-03 16:07:56
【问题描述】:

已编辑:删除可能影响问题的多余代码。

使用的模型如下:

public class StockProcessSearchModel : BaseSearchModel
{
    public bool IsOutOfStock { get; set; }
}

public class BaseSearchModel
{
    public bool IsExpected { get; set; }
    public bool IsInStock { get; set; }
}

这是唯一定义的路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
        name: "Home",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Authorisations", action = "Index", id = UrlParameter.Optional });
}

视图中的输入没有什么特别的/只是愚蠢的html。

<input type="submit" value="Arrivals" name="DisplayArrivals" />

现在我已经设置了场景,问题有点奇怪......当我单击 DisplayArrivals 输入时,它会给出以下查询字符串,即它复制参数描述符而不是值,即 true 然后 false:

http://localhost:55607/StockProcess?IsExpected=true&IsExpected=false&IsInStock=true&IsInStock=false&IsOutOfStock=false

(我应该补充一点,参数应该是:IsExpected=true&IsInStock=true&IsOutOfStock=false)

运行 Fiddler4 它告诉我请求的 URL(单击输入后立即)是:

http://localhost:55607/StockProcess?IsExpected=true&IsExpected=false&IsInStock=true&IsInStock=false&IsOutOfStock=false

DisplayArrivals 代码中的断点证明在我自己的代码执行任何操作之前发生了“重复”?!?!这让我相信这一定是路由/映射/模型绑定问题。

我想知道为什么它会重复这些查询字符串元素,更重要的是如何防止它。

编辑:这里要求的是我如何为 IsInStock 和 IsExpected 和 IsOutOfStock 生成输入:

@if (!Model.IsInStock && !Model.IsExpected && !Model.IsOutOfStock)
{
    @Html.CheckBox("IsExpected", true)
    @Html.CheckBox("IsInStock", true)
}
else
{
    @Html.CheckBoxFor(m => m.IsExpected)
    @Html.CheckBoxFor(m => m.IsInStock)
}

@Html.CheckBoxFor(m => m.IsOutOfStock)

【问题讨论】:

  • 您确实包含了所有不相关的部分,但您没有包含的重要部分是您如何生成 IsInStock 输入。

标签: c# asp.net-mvc-4 model-view-controller asp.net-mvc-routing


【解决方案1】:

如果该复选框被选中,浏览器只会发送一个值,因此无法通过查看请求来判断该复选框是留空还是页面上根本不存在用户正在查看的内容。

为了解决这个问题,ASP.NET 插入了一个隐藏的输入,表明IsInStock 是假的。这样,当提交表单时,您将始终看到 IsInStock 的值,但如果他们选中该框,则会发布第二个 true 值,当 MVC 的模型绑定启动时,它将覆盖第一个值。

这可能看起来很奇怪,但我没有看到它会导致任何问题。

更多讨论请见Why does the CheckBoxFor render an additional input tag, and how can I get the value using the FormCollection?

【讨论】:

  • 啊...非常有趣...而且很奇怪...而且令人困惑...我还没有完全测试过应用程序,但是您对我测试过的动作的参数值检测是正确的似乎工作正常,我只是担心在查询字符串中看到重复。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
相关资源
最近更新 更多