1

我有一個模型列表。我想檢索listBoxSelectedValue並將其發送到我的actionLink中進行編輯。ASP.NET MVC 4 - ListBoxFor,在ActionLink中發送selectedValue

這是我的看法:

@using (Html.BeginForm()) 
{ 
    @Html.ListBoxFor(a => a.SelectedApplis, new SelectList(ViewBag.Applis,"ID","Name", Model.SelectedApplis))<br/> 
    @Html.ActionLink("Add","Create","Application")<br/> 
    @Html.ActionLink("Edit","Edit","Application", null, new { listAppId = Model.SelectedApplis})<br/> 
    @Html.ActionLink("Delete","Delete","Application")<br/> 
} 

我創建了一個類「ListBoxApplication」與其中將包含ListBox的了selectedValue名單。

public class ListBoxApplication 
{ 
    public IEnumerable<int> SelectedApplis { get; set; } 

    public ListBoxApplication() 
    { 
     SelectedApplis = new List<int>(); 
    } 
} 

我有2個控制器的應用與家庭

在HomeController中,我創建了包含列表中選擇型號ListBoxApplication。在我的ViewBag.Applis中,我有我的所有ApplicationModel。

public ActionResult Index() 
    { 
     ListBoxApplication listeApplis = new ListBoxApplication(); 

     ViewBag.Applis = ApplicationModels.GetListApplications(); 
     return View(listeApplis); 
    } 

在我的ApplicationController:

public ActionResult Edit(ListBoxApplication listAppId) 
    { 
     // I WANT TO RETRIEVE MY listAppId HERE, but it is always 'null' 
     return View(); 
    } 

所以我覺得我的問題是在ActionLink的:

@Html.ActionLink("Edit","Edit","Application", null, new { listAppId = Model.SelectedApplis}) 

我編輯方法是不爲實際控制人(家庭/索引)。我需要將我的ListBox中的selectedValue發送到我的actionLink中(應用程序/編輯)。

listAppId始終爲'null'。它沒有檢索到值...我的actionLink中有錯誤嗎?

感謝提前

+0

從您發佈的代碼看來ApplicationModels.GetListApplications()返回null。 –

+0

我填寫了我的listApplications。它們顯示在我的列表框中。所以GetListApplications()正在運行。 – user3820903

+0

所以編輯期望一個ListBoxApplication,你發送一個IEnumerable?那是我所看到的嗎? –

回答

0

我不相信動作鏈接會觸發回發到服務器。試試這個:

@Html.ActionLink("Delete","Delete","Application")<br/> 
    @Html.ActionLink("Add","Create","Application")<br/> 

    @using (Html.BeginForm("Detail","Application")) 
    { 
     @Html.ListBoxFor(a => a.SelectedApplis, new SelectList(ViewBag.Applis)) //not sure what the other params you had here were for, but it should work like this 
     <br/> 
     <input type="submit" name="Edit" value = "Edit"/> 
     @*added in response to comment*@ 
     <input type="submit" name="Delete" value = "Delete"/> 
     <input type="submit" name="Add" value = "Add"/> 
    } 

如果你打算讓所有這些按鈕的回發到服務器,你也可以使用AJAX(和JavaScript)來完成這個相同的目標,而無需編寫出每個表單個別按鈕。這兩種方式都可以正常工作,但多種形式在技術上更容易。

public ActionResult Detail(ListBoxApplication listAppId, bool Edit, bool Add, bool Delete) 
{ 
    if(//check your bools here){ 
    } 
    return View(); 
} 
+0

謝謝,我認爲你是對的,我們不能在一個表格中有多個動作鏈接......但是你正在講述多種形式。我怎樣纔能有3個形式爲每個動作鏈接只有一個列表框?列表框只會以一種形式否?還是有另一種方式? – user3820903

+0

好的,所以有兩種方法可以做到這一點,一種方法是讓你們所有的動作鏈接成爲提交按鈕(參見上面的代碼)並將值更改爲你想要顯示的文本。現在,每個人點擊時(假設他們在表單中,將提交給服務器),現在如果你給他們每個人一個名字,並將該名稱作爲控制器的參數添加爲字符串或布爾值,那麼你將能夠找出哪個按鈕被點擊。 (在我的迴應中給我一分鐘模擬控制器) –