4

次のコードを含むインデックスページがあります。

    <div class="editor-field">
        @Html.CheckBoxFor(model => model.IncludeArchive)
        @Html.ValidationMessageFor(model => model.IncludeArchive)
    </div>

私のモデルは:

public class SearchModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string TestNumber { get; set; }
    public bool IncludeArchive { get; set; } 
}

    [Authorize]
    public ActionResult Index(SearchModel search)
    {
        var test= db.Test.AsQueryable();

        if (Request.QueryString.Count > 0) {
            if (!search.IncludeArchive) test = test.Where(x => x.Status == "Active");
        } else {
            test= test.Where(x => x.Status == "Active");
        }

        ViewBag.testList = test.ToList();

ページを参照し、[IncludeArchive]チェックボックスを選択してtrueを有効にすると、クエリ文字列は次のようになります。

http://localhost:64005/test/?FirstName=&LastName=&TestNumber=&IncludeArchive=true&IncludeArchive=false

変数IncludeArchiveがクエリ文字列に2回含まれているのはなぜですか?

ありがとう

4

1 に答える 1

3

これは、MVC がチェックボックスを操作する方法です。ページの HTML をブラウズすると、HTML ヘルパーでレンダリングされたチェックボックスごとに、false 値の非表示フィールドがあることがわかります。これにより、ユーザーがチェックボックスを選択しない場合に false 値が送信されるようになります。チェックボックスを選択すると値が 2 つになり、チェックボックスを選択しないと値が 1 つだけになるのはそのためです。詳細については、次の投稿も確認できます: asp.net mvc: Html.CheckBox が追加の隠し入力を生成する 理由

それが役に立てば幸い。

于 2012-12-25T10:37:16.910 に答える