ASP.Net mvc 3 Webアプリケーション内に次のビューがあります:-
@model IEnumerable<MvcApplication4.Models.Account>
@{
ViewBag.Title = "customer";
}
<h3>Customers Info</h3>
<script type="text/javascript">
$(function() {
$("#MoveRight,#MoveLeft").click(function(event) {
var id = $(event.target).attr("id");
var selectFrom = id == "MoveRight" ? "#SelectLeft" : "#SelectRight";
var moveTo = id == "MoveRight" ? "#SelectRight" : "#SelectLeft";
var selectedItems = $(selectFrom + " :selected").toArray();
$(moveTo).append(selectedItems);
selectedItems.remove;
});
});
</script>
<select id="SelectLeft" multiple="multiple">
@foreach (var item2 in Model.OrderBy(a=>a.ORG_NAME)) {
<option value = "@item2.ORG_ID" >@item2.ORG_NAME</option>
}
</select>
<input id="MoveRight" type="button" value=" Add >> " />
<input id="MoveLeft" type="button" value=" << Remove " />
<select id="SelectRight" multiple="multiple">
</select>
@Html.ActionLink("Next Page", "CustomersDetials", "Home", new { }, null)//for testing only
しかし、「次のページ」アクションリンクをクリックして、内にあるすべてのレコードをアクションメソッドmoveTo
に渡す必要があるという問題に直面してい ます。したがって、上記のビューからのcustomersDetials
内部にあるアイテムを、を使用してアクションメソッドに渡すために使用できるアプローチを誰かが提案できます。moveto
html.actionlink
:::アップデート:::
ビューに以下を追加しました:-
@using (Html.BeginForm("CustomersDetials", "Home"))
{
<select id="SelectLeft" multiple="multiple">
@foreach (var item2 in Model.OrderBy(a=>a.ORG_NAME)) {
<option value = "@item2.ORG_ID" >@item2.ORG_NAME</option>
}
</select>
<input id="MoveRight" type="button" value=" Add >> " />
<input id="MoveLeft" type="button" value=" << Remove " />
<select id="SelectRight" name="SelectRight" multiple="multiple">
</select>
<p>
<button type="submit">Next Page</button></p>
}
そして、選択した顧客の値に穴を開けるために、folloiwngViewModelクラスを作成しました。-
public class SelectedCustomers
{
public IEnumerable<Account> Info { get; set; }
}
次に、次のアクションメソッドを追加しました:-
public ActionResult CustomersDetials(string[] SelectRight)
{
foreach (var item in SelectRight) {
// how to assign the values of the array to my viewmodel object
}
しかし、アクションメソッド内のviewmodelオブジェクトに配列の値を割り当てる方法を決定できません。
::: UPDATE2 :::
ここで私が終わったもの。アクションメソッドは次のようになります:-
public ActionResult CustomersDetails(string[] SelectRight)
{
var selectedCustomers = new SelectedCustomers
{
Info = SelectRight.Select(GetAccount)
};
return View(selectedCustomers);
}
private Account GetAccount(string id)
{
return entities.Account.Find(id);
}
}
そして、次のビュー:-
@model MvcApplication4.Models.SelectedCustomers
@{
ViewBag.Title = "CustomerDetials";
}
<h2>CustomerDetials</h2>
//code goes here
@foreach (var item in Model.Info) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ORG_ID)
</td>
しかし、アプリケーションを実行すると、次のエラーが発生しました:-
The type of one of the primary key values did not match the type defined in the entity. See inner exception for details.
で:-
return entities.Account.Find(id);
::解決済み:: アクションメソッドとGETAccount関数の両方で文字列をlongに変更しました。