0

「オプション」リストとして使用されるドロップダウンリストをアプリケーションに表示しようとしています。ユーザーは、他の場所で適用可能なオプションを選択できます。このデータは、ユーザーがページにとどまる限り永続的です。

ドロップダウンリストは次のとおりです。

public class ResultsOptions
{
    public string mStartOption { get; set; }

    public List<SelectListItem> mListOptions { get; set; }

    public ResultsOptions()
    {
        mListOptions = new List<SelectListItem>();
    }
}

このオブジェクトは、次のように使用されます。

[HttpGet]
public ActionResult SetResults(string _submitButton, string _option)
{
    mOptions.mListOptions = new List<SelectListItem>();

    foreach (var option in mListOptions)
    {
        if (!String.IsNullOrWhiteSpace(mResultOption))
        {
            if (option == mResultOption)
            {
                SelectListItem item = new SelectListItem
                {
                    Selected = true,
                    Text = option,
                    Value = option
                };

                mOptions.mStartOption = option;

                mOptions.mListOptions.Add(item);
            }
            else
            {
                SelectListItem item = new SelectListItem
                {
                    Text = option,
                    Value = option
                };

                mOptions.mListOptions.Add(item);
            }
        }
        else
        {
            mOptions.mStartOption = "";

            SelectListItem item = new SelectListItem
            {
                Text = option,
                Value = option
            };
            mOptions.mListOptions.Add(item);
        }
    }

    return PartialView(mOptions);
}

[HttpPost]
public JsonResult SetResults(ResultsOptions _options)
{
    if (!String.IsNullOrWhiteSpace(_options.mStartOption))
    {
        mResultOption = _options.mStartOption;

        mOptions.mStartOption = _options.mStartOption;

        var selected = mOptions.mListOptions.First(_x => _x.Value == _options.mStartOption);

        selected.Selected = true;
    }

    return Json(new { Message = "Option saved" } );
}

は、およびmListOptionsを含む文字列の静的リストです。ご想像のとおり、次のようにレイアウトでレンダリングする部分ビューを実行しています。StandardSimple

<div>
    <div class="float-left">
        @Html.ActionLink("Advanced Search", "AdvancedSearch", "Store")
        @Html.ActionLink("Browse Promo Packs", "PackSearch", "Store")
    </div>
    <div class="float-right">
         @{
             Html.RenderAction("SetResults", "Store");
         }
    </div>
    <div class="clear"></div>
</div>

最後に、部分的なビューを次に示します。

@model MyApp.ViewModels.ResultsOptions

<script type="text/javascript">
        $.post("/Store/SetResults/", $('#options').serialize(),
                function(data) {
                    $('#divMessage').html(data.Message);
                });
        </script>

@using (Html.BeginForm(null, null, FormMethod.Post, new { @id = "options"} ))
{
    @Html.DropDownListFor(_model => _model.mStartOption, Model.mListOptions, new { @class = "nullify" })
    <input type="submit" name="_submitButton" value="Set"/>
    <div id="divMessage">

    </div>
}

というわけで、基本的にはそのドロップダウンリストをオプションリストとして常に表示させたいと思っています。選択した値は後で使用され、現時点では表示にほとんどまたはまったく影響を与えません。

ただし、「設定」ボタンをクリックすると、ビューは部分ビューのみをレンダリングし、残りはフラッシュされます。私がやりたかったことではありません。誰でも私を助けることができますか?

編集

提案されているように、いくつかのJson結果に取り組んできましたが、同じ問題があります。取得された結果メッセージは、後で表示される唯一のものです。

4

1 に答える 1