2013-08-20 33 views
1

在我的ASP.NET MVC 4項目我有了這片景觀:如何將SelectList的選定值傳遞給我的操作?

<td> 
     @Html.DropDownList("SelectedValue", ViewBag.SoftwaresList as SelectList, "Add New Software") 
    </td> 
    <td> 
     No Description 
    </td> 
    <td> 
     @Html.ActionLink("Add", "AddSoftware", new { pDeviceId = Model.Id, pSoftwareId = Model.SelectedValue}) 
    </td> 

我的模型對象屬性「的SelectedValue」。我想要做的是,當用戶單擊鏈接添加時,我傳遞設備ID(工作正常,因爲這是直接從傳遞到視圖的模型)和DropDownList中的選定ID。 DropDownList是一個不同Model的集合,但它也包含一個Id。

我已經試過,沒有運氣以下:

@Html.ActionLink("Add", "AddSoftware", new { pDeviceId = Model.Id, pSoftwareId = 
     ((ViewBag.SoftwaresList as SelectList).SelectedValue as SoftwareModel).Id}) 

值得一提的是:該DropDownList中填充了我SoftwareModel的正確,但是,我有沒有運氣通過從所選擇的價值附加價值到控制器中的行動。

事實上,我在Chrome中看到懸停的是:

someURL \ AController \ AddSoftware pDeviceId = 2

在那裏我會想到它是這樣的:?

someURL \ AController \ AddSoftware?pDeviceId = 2 & pSoftwareId = 5

回答

2

最簡單的方法是在表單中添加列表(使用@ Html.BeginForm或@ Ajax.BeginForm),並使Button成爲該表單的提交按鈕。控制器操作方法可以定義您嘗試提交的模型的輸入參數或僅定義ID本身。在這種情況下,瀏覽器和框架將爲您完成所有工作。

@using (
     Ajax.BeginForm 
      (
       "MyAction", 
       "MyController", 
       new {Param1 = value1, param2 = value2 }, 
       new AjaxOptions 
        { 
         OnSuccess = "javascriptForSuccess", 
         UpdateTargetId = "DivToUpdate", 
         OnFailure = "javascriptForFailure", 
         InsertionMode = InsertionMode.Replace, 
         HttpMethod = "POST", 
        } 
      ) 
     ) 
{ 
    <td> 
     @Html.DropDownList("SelectedValue", ViewBag.SoftwaresList as SelectList, "Add New Software") 
    </td> 
    <td> 
     No Description 
    </td> 
    <td> 
     <input type="submit" id="Btn_Create" name="Btn_Create" value="Create" /> 
    </td> 
} 
+0

我已經更改了上面的代碼以適合我,但是當我添加新的{pDeviceId = Model.Id,pSoftwareId = Model.SelectedValue}時,Action參數始終會以-1作爲SelectedValue。就好像DropDownList永遠不會正確設置SElectedValue? – Tada

1

您正在服務器上創建該操作鏈接並將HTML發送給客戶端。用戶倒在客戶端,這意味着當您添加鏈接創建HTML(即@Html.ActionLink("Add"

你應該,而是創建一個form和後值服務器是無法獲取所選的選擇從降值值

您可以使用JavaScript從鏈接中獲取選定的值,並在鏈接被點擊時將其發送到服務器。

+1

能夠爲這些解決方案提供小例子嗎? – Tada

0

試試這個

@Html.DropDownListFor(m => m.pDeviceId , (SelectList)ViewBag.SoftwaresList, new { onchange = "document.location.href = 'AddSoftware?pDeviceId=' + this.options[this.selectedIndex].value;" }) 
0

你最好的選擇是使用下面的HTML和控制器設置把它變成一種形式。您還必須更改ViewBag。SoftwaresList成List<SelectListItem>()

HTML:

@using(Html.BeingForm()) 
{ 
<td> 
    @Html.DropDownListFor(x => x.SelectedValue, ViewBag.SoftwaresList as List<SelectListItem>, "Add New Software") 
</td> 
<td> 
    No Description 
</td> 
<td> 
    @Html.ActionLink("Add", "AddSoftware", new { pDeviceId = Model.Id, pSoftwareId = Model.SelectedValue}) 
</td> 
} 

控制器:

[HttpPost] 
public ActionResult(MyModel model) 
{ 
    //Logic Code Goes Here 
    return View(model); 
} 

選擇列表: 這裏是你如何創建一個選擇列表。請注意我如何不使用「選定」參數,這將自動計算,因此您不需要

var selectList = new List<SelectListItem>(); 
selectList.Add(new SelectListItem 
{ 
    Text = "Name", 
    Value = "ID" 
}); 
相關問題