1

私の ASP.NET MVC 4 プロジェクトには、次のようなビューがあります。

    <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 (これはモデルからビューに直接渡されるため、正常に動作します) とドロップダウンリストから選択された ID を渡すことです。DropDownList は別のモデルのコレクションですが、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

4

4 に答える 4

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>
}
于 2013-08-20T12:54:02.207 に答える
1

サーバー上でそのアクション リンクを作成し、HTML をクライアントに送信しています。ユーザーは、クライアントのドロップダウンから値を選択します。これは、追加リンクの HTML を作成するときに使用できないことを意味します (つまり@Html.ActionLink("Add")

代わりに、form値を作成してサーバーに投稿して、選択した値を取得する必要があります

または

JavaScript を使用して、リンクから選択した値を取得し、リンクがクリックされたときにサーバーに送信できます。

于 2013-08-20T12:51:19.693 に答える
0

これを試して

@Html.DropDownListFor(m => m.pDeviceId , (SelectList)ViewBag.SoftwaresList, new { onchange = "document.location.href = 'AddSoftware?pDeviceId=' + this.options[this.selectedIndex].value;" })
于 2013-08-20T12:59:32.033 に答える
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"
});
于 2013-08-20T13:00:24.757 に答える