2012-06-22 53 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.*帮手了。