2012-06-22 135 views
0

我有沒有改變整體視圖改變內容的看法, 這裏(改變視圖的一部分) 是我的代碼:更改視圖檢查後複選框

型號:

public class DisplayData 
{ 
    public int ID { get; set; } 
    public DisplayData(int ID) 
    { 
     this.ID = ID; 
    } 
} 

控制器:

public ActionResult PartialDemo(string Data) 
    { 
     List<DisplayData> Display = new List<DisplayData>(); 

     if (Request.IsAjaxRequest()) 
     { 
      if (Data == "1") 
      { 
       Display.Add(new DisplayData(3)); 
       Display.Add(new DisplayData(4)); 
      } 
      else 
      { 
       Display.Add(new DisplayData(5)); 
       Display.Add(new DisplayData(6)); 
      } 
      return PartialView("PartialDemoUC", Display); 
     } 
     else 
     { 
      Display.Add(new DisplayData(1)); 
      Display.Add(new DisplayData(2)); 
      return View("PartialDemo", Display); 
     } 
    } 

PartialDemoUC.cshtml

@model IEnumerable<dynamic> 

@foreach(var items in Model) 
{ 
    @items.ID  
} 

PartialDemo.cshtml:

@model IEnumerable<AppTwitter.Models.DisplayData> 
    @{ 
     ViewBag.Title = "PartialDemo"; 
    } 

    <script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"> </script> 
    @Ajax.ActionLink("**Link_1**", "PartialDemo", "PartialDemo", new {Data= "1" }, new AjaxOptions { UpdateTargetId = "rsvpmsg" }) 
    @Ajax.ActionLink("**Link_2**", "PartialDemo", "PartialDemo", new {Data= "2" }, new AjaxOptions { UpdateTargetId = "rsvpmsg" }) 

    <div id="rsvpmsg"> 
    @{ Html.RenderPartial("PartialDemoUC", this.Model);} 
    </div> 

我將用checkbox:如果chechbox改變Link_1Link_2檢查它就像鏈接被點擊 我該怎麼辦這個 ?

我很抱歉我的英文不好。

+0

複選框未選中時會發生什麼情況?就像鏈接被點擊一樣嗎?你需要區分在PartialDemo操作中複選框是否被選中的事實嗎?如果不是你爲什麼使用複選框? –

+0

@Darin Dimitrov如果複選框沒有被選中,如果鏈接沒有被點擊是相同的,是的,我想區分是否在我的PartialDemo動作中檢查複選框的事實,謝謝達林 – Victor

+0

你似乎是自相矛盾的:你說你想要以區分複選框是否在您的PartialDemo動作中被選中,而另一方面,如果複選框未被選中,如果鏈接沒有被點擊,則複選框相同。但是,如果沒有點擊鏈接,則根本不會發送AJAX請求,甚至不會調用控制器操作。那麼是哪一個呢。我發佈了一個答案,其中始終發送AJAX請求,並將isChecked值作爲附加參數傳遞。如果你不想在這種情況下發生AJAX請求,你將不得不調整我的代碼。 –

回答

1

你可以使用標準的複選框:

@model IEnumerable<AppTwitter.Models.DisplayData> 
@{ 
    ViewBag.Title = "PartialDemo"; 
} 

<div data-url="@Url.Action("PartialDemo", "PartialDemo")" id="checkboxes"> 
    @Html.CheckBox("Data1", new { data_value = "1" }) 
    @Html.CheckBox("Data2", new { data_value = "2" }) 
</div> 

<div id="rsvpmsg"> 
    @{Html.RenderPartial("PartialDemoUC", this.Model);} 
</div> 

,然後在一個單獨的JavaScript文件(你需要參考)認購.change()事件的複選框,並觸發一個AJAX請求:

$(function() { 
    $('#checkboxes :checkbox').change(function() { 
     var value = $(this).data('value'); 
     var isChecked = $(this).is(':checked'); 
     var url = $('#checkboxes').data('url'); 
     $.ajax({ 
      url: url, 
      type: 'POST', 
      data: { data: value, isChecked: isChecked }, 
      success: function (result) { 
       $('#rsvpmsg').html(result); 
      } 
     }); 
    }); 
}); 

現在您的控制器操作可能需要2個參數,這將允許您除了知道哪個複選框已被點擊,其值是否被選中或未選中,因爲與鏈接相反,複選框可能有兩種狀態:

public ActionResult PartialDemo(string data, bool isChecked) 
{ 
    ... 
} 

哦,你不再需要jquery.unobtrusive-ajax.min.js腳本,如果你不使用Ajax.*幫手了。