2013-04-05 79 views
0

我很新的MVC剃鬚刀,留下了一個代碼,讓我感到困惑。剃刀/ Javascript,最佳實踐

我在我的視圖中有一個模型,並從該模型中創建一個列表。

 @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是叫我只是在那裏使用變量。但這只是覺得愚蠢。有沒有什麼簡單(更好看)的方式來解決這個問題?

回答

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> 

,然後你可以悄悄地AJAXify這種定位的:

$('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 
+0

謝謝達林,我會試試看。 :) – Tim 2013-04-05 06:41:52

+0

和往常一樣,你拯救了我的一天達林。謝謝! :) – Tim 2013-04-05 06:58:05