1

私が取り組んでいるMVCアプリの場合、次のような多数のサブビューを設定できるビューがあります。

一部のビューの一部

@model SuperFoo

<!-- snip unimportant details... ->

@foreach(var current in Model.Items)
{
    @Html.Partial('_Item', current);
}

<!-- ...SNIP more useless details... -->

<script>
$(document).ready(function () {
    $('.add-item').click(function () {
        // Make some AJAX call to do something.
    });
});
</script>

個々のアイテムの部分

@model Foo

<div class='some-styling'>
   @Html.HiddenFor(m => m.Name)
   @Html.HiddenFor(m => m.PropA)
   @Html.HiddenFor(m => m.PropN)

   <input type='text' value='' />
   <a href='javascript:;' class='no-line add-item'>Add To Cart</a>
</div>

私は2つのことを理解しようとしています:

A)クリックした特定のボタンだけがそのイベントを起動するようにするにはどうすればよいですか?

B)特定のアイテムについて取得した情報に固有の情報をどのように使用しますか?お気づきの方もいらっしゃると思いますが、アイテムレベルのビューに編集可能な入力フィールドがあります。クリックがトリガーされると、結果のAJAX呼び出しはそのテキストボックスの値を使用する必要があります(これは簡単な部分です$('selector').val()) 。

私はjQueryとMVC3のみを使用しています。質問(おそらくばかげたものですが、後で説明します):個々のアイテムの追加リンクは、それらをレンダリングしているパーシャルのコンテキストを使用してどのように機能しますか?

4

1 に答える 1

1

ページが完全にレンダリングされた後は、コードを管理するだけのような分離がないことに気づきpartial viewます。私はあなたの質問を完全には把握していませんが、試してみませんか

Aへの回答

$('.add-item).click(function (e) {
  e.preventDefault();// prevent the default behavior of the anchor
  this; //is your friend, it will give you the DOM element which is clicked
  $(this); // will give you the nicely wrapped jQuery object      
});

Bへの回答

特定のアイテムについて取得した情報に固有の情報を使用するにはどうすればよいですか?

ここで何を求めているのかわかりませんが、アイテムを次のようにラップする場合

<div class="item-wrap">
  <input type='text' value='10'/>
  <a href=#' class='no-line add-item'>Add To Cart</a>
</div>

<div class="item-wrap">
  <input type='text' value='20'/>
  <a href='#' class='no-line add-item'>Add To Cart</a>
</div>

次にクリックハンドラーで

$('.add-item).click(function () {
       var $this = $(this);
       var $val = $this.closest(':input').val();
       //will give you 20 or 30 depending upon which one you click

       //or
        var $$val = $this.closest('.item-wrap>:input').val();

      //you can write a variety of selectors which can vary in perf 

    });
于 2013-03-20T19:59:41.480 に答える