2013-03-12 109 views
0

好的,我有一個Html.DropDownList,我希望能夠執行一個控制器方法ActionResult output(string test)併發送一個參數給它。我有這樣的事情了,不過我得到一個遺漏的類型錯誤:無法設置屬性空消息的「動作」:從MVC中的剃刀html視圖執行控制器方法?

@Html.DropDownList(
"revisions", ViewData["revisions"] as SelectList, 
new 
{ 
    onchange = "this.form.action = '/Shops/output('test')'; this.form.submit();" 
}) 

如何去修復我的代碼?

回答

1

如果你的操作方法的參數名字是id

public ActionResult output(string id) 
{ 
    //do something 
} 

,那麼你可以使用你的表單操作的網址是這樣的。(默認路由會照顧好休息)

/Shops/output/somestringhere. 

如果你有不同的名稱,使用它作爲查詢字符串

public ActionResult output(string name) 
{ 
    //do something 
} 

現在使用表單操作URL像

/Shops/output?name=somestringhere 

另一個建議你的代碼是爲了避免可視數據用於呈現落下。嘗試使用強類型的視圖模型,以及將數據傳輸到視圖的屬性。也嘗試從您的視圖中移動您的JavaScript並使其變得無力。這樣你的視圖只能保持乾淨的標記。

假設您想要在文檔創建視圖中顯示修訂下拉列表,請將屬性添加到您的視圖模型以獲取下拉項目。

public class DocumentCreateViewModel 
{ 
    //Other properties also here 

    public List<SelectListItem> Revisions{ set;get;} 
    public int SelectedRevision { set;get;} 

    public DocumentCreateViewModel() 
    { 
    Revisions=new List<SelectListItem>(); 
    } 
} 

並且在您的GET操作中,將下拉內容填充到Revisions屬性。

public ActionResult Create() 
{ 
    var vm=new DocumentCreateViewModel(); 
    vm.Revisions=GetRevisionItemsFromSomeWhere(); 

    return View(vm);  
} 

而在你的強類型的視圖,

@model DocumentCreateViewModel 

    @using(Html.Beginform()) 
    { 

     @Html.DropDownListFor(x => x.SelectedRevision, 
        new SelectList(Model.Revisions,"Value","Text"), "Select..") 

     <input type="submit" /> 
    } 

我們處理表單提交下拉的變化事件,添加此腳本。

$(function(){ 

    $("#SelectedRevision").change(function(){ 
    var _this=$(this); 
    var selectedRevision=_this.val();  
    $("form#YourFormIDHere") 
       .attr("action","./Shops/output/"+selectedRevision).submit(); 
    }); 


}); 

代替硬編碼的URL到店/輸出,你可以使用剃刀助手方法(@Url.Action),以獲得正確的路徑。

+0

謝謝老兄,我對MVC很認真,並且還是一名學生,但這種做事方式顯然要好得多,禮儀和編程實踐。我不確定在創建下拉列表時(視頻中的倒數第二部分),我無法理解視圖中發生了什麼? – 2013-03-12 14:46:11

+0

@ barnacle.m:DropDownListFor幫助器方法將在視圖中呈現下拉菜單。反正歡迎來到ASP.NET MVC的精彩世界:) – Shyju 2013-03-12 14:49:32

+0

哈哈謝謝。公共ActionResult創建(),是在我的控制器類? – 2013-03-12 18:46:05

1
@Html.DropDownList(
"revisions", ViewData["revisions"] as SelectList, 
new 
{ 
    onchange = "submitForm();" 
}) 

和你Javacript放在這裏

function submitForm() 
{ 
     var form = document.forms[0]; 
     form = '/Shops/output?test=test'; 
     form.submit(); 
} 
相關問題