2009-06-04 114 views
0

我想在我的觀點,一個下拉列表中選定的值發送到一個新的動作之一創建ActionLink的。到目前爲止,我有這個,我只需要找到一種方法來填充我的ActionLink結束的ID。ASP.Net MVC的ActionLink

<%= Html.DropDownList("StatusDropDown") %> 
    <%= Html.ActionLink("Apply","Index",new {Controller="Tasks", Action="Index", id="DROPDOWN LIST SECLECTED VALUE"}) %> 

顯然這個鏈接需要更新,只要選擇的下拉列表的索引改變了。這是我需要在JavaScript中做的事情嗎?還是有更好的方式來管理ASP.Net MVC內?

感謝

回答

2

如果你不想使用表單提交(即,要作爲URL,而不是形式參數的一部分傳遞的參數),你需要用JavaScript來構建URL的客戶端。

<%= Html.DropDownList("StatusDropDown") %> 
<a id="applyLink" href="#">Apply</a> 

<script type="text/javascript"> 

    function setHref(elem, val) 
    { 
     if (val) { 
      $(elem).attr("href", "/Tasks/" + val); 
      $("#applyLink").unbind("click"); 
     } 
     else { 
      $(elem).attr("href", "#"); 
      $("#applyLink").click(function() { alert("No value chosen"); }); 
     } 
    } 

    $(function() { 
     var dropdown = $("#StatusDropDown"); 
     dropdown.change(function() { 
      setHref(this, $(this).val()); 
     }); 
     setHref(dropdown, null); 
    }); 
</script> 
0

的鏈接進入到另一個頁面,它實際上是一個重定向。更新鏈接所參考下拉列表的唯一方法是使用javascript。

這聽起來像你想的一種提交一份行動。在這種情況下,您應該使用表單和提交按鈕,在您的控制器中創建適當的處理程序。請記住,您可以根據提交的表單值在控制器中進行重定向。因此,像這樣:

<form method="post" action="/MyForm"> 
    <input type="select" name="mySelect"> 
     <option value="1">First Option</option> 
     <option value="2">Second Option</option> 
    </input> 
</form> 

而在你的控制器:

public ActionResult MyForm(int mySelect) 
{ 
    return Redirect(String.Format("myurl?id={0}", mySelect)); 
    // Note the above is only preferable if you're going to an external link 
    // Otherwise you should use the below: 
    return RedirectToAction("myAction", new { id = mySelect }); 
} 

顯然,在這種簡化的例子中,MyForm的代理所需的操作是多餘的,但它說明了這樣你就可以應用它的想法到你的具體情況。

+0

我也想過這個,但是我不喜歡在一個單一的動作中往返兩次,如果你想讓你的URL保持RESTful。 – tvanfosson 2009-06-04 12:29:26

+0

是的,但是這僅僅是一個例子。你可以只具有形式提交/ myAction - 我不知道他的具體設置,但這是爲了說明,我使用的ActionLink是因爲我試圖用一種形式的原則 – joshcomley 2009-06-04 12:30:52

+0

原因及其使用的示例任務查詢字符串保存/?StatusId = 1因爲我試圖得到像Tasks/filter/1/open這樣的東西其中1是狀態的id並且open是名字,所以我希望這部分站點的可讀URL – Gavin 2009-06-04 12:39:39