2

私はかみそりのビューでMVC3を使用しています。私はユーザー<li>に選択するsのリストを提供しています:

        <ol id="selectable">
            @foreach (var ebat in Model.AvailableSizes)
            {
                <li class="ui-widget-content">@ebat.Item1 x @ebat.Item2</li>                    
            }
        </ol>

ここで、Model.AvailableSizesはList<Tuple<int,int>>です。ユーザーがそれらの1つを選択するとき、ユーザーが使用したいjQueryから見つけられるようにしたいと思いTuple<int,int>ます。

ちなみに私はこれらのリストでjqueryuiSelectableを使用しています。

で選択した要素を見つけることが$(".ui-selected:first")できると思いますが、関連するモデルデータ、つまり@ebat.Item1とを取得@ebat.Item2して、パラメーターとしてサーバーに送信するにはどうすればよいですか?

ここでの最初のアプローチについてはかなり疑わしいです。つまり、これほど難しいことではないはずです。したがって、このような状況でmodel、html、jqueryを一緒に使用するためのより良い方法を教えていただければ、すばらしいと思います。ありがとう。

4

2 に答える 2

1

選択した値の非表示フィールドを追加し、選択イベントでその値を設定できます。

@Html.HiddenFor(m => m.SelectedSize)

ただし、Tuple<T1,T2>パラメーターなしのコンストラクターがないため、モデル バインダーはインスタンスを作成できません。サイズごとに整数 ID を指定し、POST リクエストから読み取ることができます。

Tuple<int,T1,T2>AvailableSizes プロパティに使用する必要があります。また、非表示フィールドに保存できるように、ID 値を li 要素のカスタム属性として保存する必要があります。

それでも、MVC はポスト リクエストで AvailableSizes プロパティを読み取ることができないため、そのプロパティを除外して SelectedSize プロパティのみを読み取る必要があります。

モデル プロパティは次のようになります。

public IEnumerable<Tuple<int,T1,T2>> AvailableSizes { get; set; }
public int SelectedSize { get; set; }

サイズ ID をカスタム属性として保存する必要があります。

<ol id="selectable">
    @foreach (var ebat in Model.AvailableSizes)
    {
        <li class="ui-widget-content" data-size-id="@ebat.Item1">@ebat.Item2 x @ebat.Item3</li>                    
    }
</ol>

data-size-id 属性を読み取り、それを SelectedSize 非表示フィールドに設定する select イベント用の JavaScript を提供する必要があります。

于 2012-06-17T13:03:28.340 に答える
0

li タグに属性を追加します。

<li class="ui-widget-content" data="@ebat.Item1-@ebat.Item2">@ebat.Item1 x @ebat.Item2</li> 

次の jQuery コードを試してください。

    var value = $(".ui-selected:first").attr("data");
    var items = value.split("-");
    var item1 = items[0];
    var item2 = items[1];
于 2012-06-17T13:21:55.273 に答える