设计客户端以使用ajax更新多个局部视图
Design client side for updating multiple partial views with ajax
如何设计用于更新多个局部视图的ASP.NET MVC?
类似于基于客户端对视图的操作,如何更新其他局部视图。
示例:假设有3个局部视图,选中其中一个局部视图中的复选框后,其他2个局部视图应该得到更新。
我是否必须为不同的视图设计不同的Javascript模块,然后从一个部分视图引发事件,然后订阅其他两个部分视图?
有没有支持这种事件的js框架,或者两个视图是如何相互对话的?
请记住,因为这些是局部视图并不意味着它们不属于当前DOM。
这意味着如果我有这个js
function ClickEventListener(partialView)
{
alert(partialView.innerHTML);
}
我有这个:
<div id="view_1" onclick="ClickEventListener(this)">
<!--Your content-->
</div>
<div id="view_2" onclick="ClickEventListener(this)">
<!--Your content-->
</div>
<div id="view_3" onclick="ClickEventListener(this)">
<!--Your content-->
</div>
将正常工作。考虑到这一点,您可以相互通信部分视图,编辑其内容(分配id或类,这取决于您想要的方式),并且您只需要一个ajax来请求服务器进行响应并编辑所需的部分视图。
这里的例子:
这是已经显示的3个等价视图
<div id="view_1" onclick="ClickEventListener(this)">
<!--Your content-->
</div>
<div id="view_2" onclick="ClickEventListener(this)">
<!--Your content-->
</div>
<div id="view_3" onclick="ClickEventListener(this)">
<!--Your content-->
</div>
<script>
function ClickEventListener(partialView)
{
var id;
// base on which partial was click, send request the server a background color for example
$.get('localhost/ChangeBGColor',{id: $(partialView).prop('id')},function(response){
$(response.partialTarget).css({background:response.color});
})
}
}
<script>
服务器:
public JsonResult ChangeBGColor(int id){
object response;
switch(id)
{
case 1:
response = new { partialTarget= 'view_2',color = 'blue'};
break;
case 2:
response = new { partialTarget= 'view_3',color = 'black'};
break;
case 3:
response = new { partialTarget= 'view_1',color = 'green'};
break;
}
return Json(response,JsonRequestBehavior.AllowGet);
}
如果你需要重新构建它的内容,你也可以这样做。
建议:
部分视图非常棘手,如果在其中一个或全部视图中声明了javascript代码,那么删除部分视图也没关系。变量、方法、对象等将保留在内存中,不会随它一起删除。
已更新
尝试使用数据属性
例如:让部分视图返回的动作在主控制器中作为p1、p2、p3您可能需要向这些操作传递一个值。这些操作所依赖的因素可以存储在数据属性中。
public ActionResult Index()
{
return View();
}
public ActionResult p1(int id)
{
ViewBag.P1 = id;
return PartialView();
}
public ActionResult p2(string id)
{
ViewBag.P1 = id;
return PartialView("p1");
}
public ActionResult p3(int id)
{
ViewBag.P1 = id;
return PartialView("p1");
}
关于索引视图
<input type="checkbox" class="clickable" data-val1="12" data-val2="hello1" data-val3="1" />
<input type="checkbox" class="clickable" data-val1="13" data-val2="hello2" data-val3="2" />
<input type="checkbox" class="clickable" data-val1="14" data-val2="hello3" data-val3="3" />
<div id="partialContainer1"></div>
<div id="partialContainer2"></div>
<div id="partialContainer3"></div>
<script>
$(function () {
EventBinder();
})
function EventBinder() {
$('.clickable').click(function () {
var dataval1 = $(this).data('val1');
var dataval2 = $(this).data('val2');
var dataval3 = $(this).data('val3');
$("#partialContainer1").load("/home/p1/" + dataval1,EventBinder);
$("#partialContainer2").load("/home/p2/" + dataval2,EventBinder);
$("#partialContainer3").load("/home/p3/" + dataval3,EventBinder);
});
}
</script>
在PartialView上(出于演示目的,我使用了一个p1视图)
@{
Random r = new Random();
}
<h2>@ViewBag.P1</h2>
<input type="checkbox" class="clickable" data-val1="@r.Next(30)" data-val2="@r.Next(30)" data-val3="@r.Next(30)" value="Hi2"/>
您可以根据需要使用数据属性。希望这能对你有所帮助。
相关文章:
- 正在更新mongod中两个对象内部的数组
- 更新嵌套对象的多个字段
- 选择单选按钮更新2个输入字段
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- 多个进度条可视地只更新一个进度条
- 根据复选框值更新第一个标题列
- 查找与锁定和更新调度相关的一个或两个节点模块
- 使用.substr将第一个字母更新为大写
- 在 magento 中使用多个价格,但在更改自定义选项时不会更新
- 帆.js吃水线更新:如何处理多个更新
- 使用 jQuery(移动)更新多个选择标签
- 比较 2 个 JSON 并在更新 json 时更改键值
- jQuery:动态更新 N 个最新值的列表
- 如何基于其他两个滑块更新滑块
- 根据多个输入值更新数据库
- 具有多个依赖项的Ember属性不会按预期更新
- jquery自动更新两个选择字段
- jQueryAjax SQL-如果我在多个用户上单击编辑,则Ajax会更新我单击的所有内容.不是最后一个点击
- 在更新选择器中使用$in时颠倒多个文档
- 更新Javascript货币计算器以实时计算多个总额