1

編輯:刪除多餘的代碼,可能導致問題。奇怪的查詢字符串'幾乎'元素的重複

所使用的模型如下:

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輸入,即它複製了參數的描述,但沒有價值,即真然後假:

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

(我要補充的是,參數應該是:IsExpected =真& IsInStock =真& IsOutOfStock =假)

運行Fiddler4它告訴我,請求的URL(即一旦輸入點擊)是:

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

,並在DisplayArrivals代碼中的斷點證明「複製'在我自己的代碼執行任何操作之前發生?!?!這導致我相信它必須是路由/映射/模型綁定問題。

我想知道它爲什麼重複這些querystring元素,更重要的是如何防止它。

編輯:由於這裏要求是怎麼產生的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) 
+0

隨着你所包含的所有不相關的部分,你不包括的一個重要部分是你如何生成'IsInStock'輸入。 – StriplingWarrior

回答

1

瀏覽器,如果它被選中,所以就對這個複選框,將只發送一個值無法通過查看請求來判斷該複選框是否爲空,或者它是否僅存在於用戶正在查看的頁面上。

爲了解決這個問題,ASP.NET插入一個隱藏的輸入,說IsInStock是錯誤的。這樣,當表單提交時,您將始終看到IsInStock的值,但如果他們選中了該框,則會發布第二個值,這會在MVC的模型綁定開始時覆蓋第一個值。

這可能看起來很奇怪,但我沒有看到它造成任何問題。

請參閱Why does the CheckBoxFor render an additional input tag, and how can I get the value using the FormCollection?進一步討論。

+0

啊......非常有趣......並且很奇怪......並且讓人困惑......我沒有完全測試應用程序,但你的權利在於,我測試的操作的參數值檢測似乎工作正常,我只是擔心查詢字符串中的重複。 –

相關問題