2011-04-18 33 views
0

的選擇客戶端的我願做以下的事情: - 加載一個數組(意思是使用EF來過濾請求的結果)我的aspx頁面,取決於我的下拉列表(包含要在我的請求結果中傳入參數的ID)的選擇,客戶端。MVC:加載一個數組,這取決於一個下拉列表

我想,生病了的jQuery或類似的東西通過。

我已經開始尋找解決方案,是這樣的。我不確定我是否能找到解決方案。 我很初學者的MVC和客戶端腳本,所以我接受其他任何一種解決方案,或任何好的教程,解釋我的問題的結果。

<script type="text/javascript" src="/Scripts/jquery-1.5.2.js"></script> 
<script type="text/javascript" src="/Scripts/jquery-ui-1.8.11.custom.js"></script> 
<script type="text/javascript"> 
     $(function() { 
      $("#FK_MET_ID").change(function() { 
       $.get("/Provider/UpdateListProvider", function(data) { 
       // something must be written here ? 
       $("#ResultProvider").toggle(); // the div, containing my generated result ? 
       }); 
      }); 
     }); 
</script> 

<% using (Html.BeginForm("Action", "Post")){%>  

<div id="ResultProvider"></div> 

<%= Html.DropDownList("FK_MET_ID"); %> 
<% } %> 

(我用下面的教程開始編碼這部分代碼:http://www.dotnetcurry.com/ShowArticle.aspx?ID=443

回答

0

您是在正確的道路,你必須添加一些腳本得到它的工作。您需要傳遞選定的值,您應該將控制器代碼添加到問題中。也許這是一個比獲得更多的帖子,但它超出了這個問題的範圍。你回報的數據是什麼?我認爲你應該使用jquery template來顯示你的數據。

$(function() { 
      $("#FK_MET_ID").change(function() { 
       $.get("/Provider/UpdateListProvider/" + $(this).val(), function(data) { 

       if (data) { 
        $("#contractsTemplate").tmpl(data).appendTo('#contracts'); 
       } 

       }); 
      }); 
     }); 

編輯:

的最好方法是使用JSON的工作,在您選擇控制器,你需要這樣一個方法:

[HttpPost] 
public virtual JsonResult GetContracts(string nameOfTheVariable) 
     { 
      var contracts = _session.All<Contract>();//add restriction with the variable 
      return Json(contracts); 
     } 

在您選擇查看您可以用jquery template工作:

<script id="contractsTemplate" type="test/x-jquery-tmpl"> 
    <li><a href="/contract/${Id}/version/${Version}/edit">${Filename}</a>&nbsp;&nbsp;&nbsp;<span>${Status}</span></li> 
</script> 

<script type="text/javascript" src="@Links.Content.javascript.jquery_tmpl_min_js"></script> 
<script type="text/javascript"> 

    $(function() { 
     GetContracts(); 
    }); 

    function GetContracts() { 
     $.ajax({ 
      type: "POST", 
      url: "/API/GetContracts", 
      dataType: "json", 
      success: function (data) { 
       $('#contracts').empty(); 
       if (data) { 
        $("#contractsTemplate").tmpl(data).appendTo('#contracts'); 
       } 
      } 
     }); 
    } 
</script> 

您需要在您的global.ascx中添加一個自定義路由,它將指向到您的控制器與你想要的行動和param nameOfTheVariable你需要或你也可以做它作爲查詢參數yoururl.com $ action?nameOfTheVariable =「value」

讓我知道如果你需要更多的幫助!

+0

感謝您的回答。不過,我有幾個問題...... 1)我想我將不得不創建一個如下的控制器代碼:ActionRestut UpdateListProvider。但是,我要給這個傳入的變量賦予哪個名字,來自「this.val」? 2)函數(數據)用於什麼?爲了回答你的問題,數據返回將會是我的表單中的一個數組,我不想重新加載完整的表單。 (對不起,我的英語水平,希望我已經很清楚...... – PetersLast 2011-04-19 06:51:44

+0

我添加了一些代碼,讓我知道,如果你確定這一點。對於名稱,你必須在global.ascx添加自定義路線。功能(數據)是在你的控制器進行ajax調用之後調用的函數,數據將是你從控制器返回的數據。你可以在Chrome的控制檯(ctrl + shift + j)中使用console.log(data)來查看你有什麼在裏面。 – VinnyG 2011-04-19 13:34:27

+0

非常感謝VinnyG。關於JQueryTemplate搜索一點點後,我們終於找到了解決辦法,而不是完全像你,但它工作。再次感謝了很多:) – PetersLast 2011-04-21 07:34:55

相關問題