我对MVC-razor来说很新,而且留下的代码让我感到困惑。
我在我的视图中有一个模型,从该模型我创建了一个列表。
@For Each Item in Model
@<li><a href="#" data-id="ItemOne">Click Me</a></li>
然后我有一个javascript来进行绑定;
$("a[data-id]").click(function(e)
{
$( "#PopUp" ).dialog({resizable: false, width:800, height: 400, title: "" });
});
填充此静态窗口;
<div id="PopUp" title="PopUp">
<h1>MyPopUp<H1>
</div>
所有这些代码都在一个视图中
我现在想用我的一些模型项目数据填充窗口(IE,我点击的项目给我一个带有项目数据的弹出窗口),我已经达到了锁定的心态,我的想法是某种带有该模型数据的开放剃刀变量,然后遍历项目以创建具有给定标识符的相等数量的PoP-Up-window,当调用javascript时我只使用那里的变量。但这只是觉得愚蠢。是否有任何简单(更好看)的方法来解决这个问题?
答案 0 :(得分:1)
你可以使用AJAX。基本上你可以有一个真正的锚点来控制器动作,它会返回一个局部视图。然后,当单击此锚点时,向此操作发送AJAX请求并更新DOM。
我想这个例子可能值得:
@For Each Item in Model
@<li>@Html.ActionLink("Click Me", "SomeAction", "SomeControllerName", New With { Key .id = item.Id }, New With { Key .class = "popup" })</li>
然后你可以不引人注意地AJAX化这个锚:
$('a.popup').click(function(e) {
$.ajax({
url: this.href,
type: 'GET',
cache: false,
success: function(result) {
$('#PopUp').html(result).dialog({
resizable: false,
width: 800,
height: 400,
title: ''
});
}
});
return false;
});
然后你会有一个相应的控制器动作来渲染部分:
Function SomeAction(ByVal id as Integer)
Dim model = ... get your model from somewhere using the id
Return PartialView(model)
End Function