私はこのトピックに関する先週の投稿を読んでいて、近づいてきましたが、まだ十分ではありません. どんな支援も役に立ちます。多数の Hyper-V サーバーがあり、それに割り当てられたゲスト VM を最新の状態に保とうとしています。割り当てられたゲスト マシンの 2 つのリスト 1 つのリストがあります。利用可能なゲスト マシンの 2 番目のリスト
私は次のものを持っています:
ビューモデル:
namespace MyFirstApplication.ViewModels
{
public class HVHostGuestViewModel
{
public string HVCname { get; set; }
public int AvailMemory { get; set; }
public int AvailDisk { get; set; }
public SelectList HVGuests {get; set; }
public SelectList AvailGuests { get; set; }
public List<string> GuestsRemoved { get; set; }
public List<string> GuestsAdded { get; set; }
public string HVComments { get; set; }
}
}
コントローラ:
public ActionResult Manage(int id)
{
tblHVHost tblhvhost = db.tblHVHosts.Find(id);
var AssignedComputers = (from c in db.tblComputers
where (c.tblHVHostHVHostId == id && c.HostName ! = "DTR")
orderby(c.HostName)
select c).ToList();
var UnAssignedComputers = (from c in db.tblComputers
where c.tblHVHostHVHostId == 1 && c.HostName != "DTR"
orderby(c.HostName)
select c).ToList();
var GuestVM = new SelectList(AssignedComputers,"tblHVHostHVHostId","HostName");
var AvailVM = new SelectList(UnAssignedComputers, "tblHVHostHVHostId","HostName");
var HVViewModel = new HVHostGuestViewModel
{
HVCname = tblhvhost.HVCName,
AvailDisk = 1000,
AvailMemory = 32,
HVComments = tblhvhost.HVComments,
HVGuests = GuestVM,
AvailGuests = AvailVM
};
return View(HVViewModel);
}
//
// POST:/HVHost/Manage/
[HttpPost]
public ActionResult Manage(HVHostGuestViewModel HVViewModel)
{
return View();
}
表示: (Razor エンジンを使用)
VM を Hyper-V サーバーに割り当てる
@using (Html.BeginForm("Manage", "HVHost", FormMethod.Post)){
<table>
<tr>
<th> Assigned Machines </th>
<th></th>
<th> Available Machines</th>
</tr>
<tr>
<td>
@Html.ListBox("Guests", Model.HVGuests)
</td>
<td>
<input id="MoveRight" type="button" value=" >> " />
<br />
<input id="MoveLeft" type="button" value=" << " />
</td>
<td>
@Html.ListBox("Available", Model.AvailGuests)
</td>
</tr>
<tr>
<td></td>
<td> <input type="submit" value="Submit" onclick =" " /> </td>
<td></td>
</tr>
</table>
@Html.HiddenFor(model => model.GuestsRemoved)
@Html.HiddenFor(model => model.GuestsAdded)
}
Jquery スクリプト:
$(function () {
$("#MoveRight,#MoveLeft").click(function (event) {
var id = $(event.target).attr("id");
var selectFrom = id == "MoveRight" ? "#Guests" : "#Available";
var moveTo = id == "MoveRight" ? "#Available" : "#Guests";
var selectedItems = $(selectFrom + " :selected").toArray();
$(moveTo).append(selectedItems);
selectedItems.remove;
var name = $(event.target).attr("Text");
$("#GuestsRemoved").val("MPE999")
$("#GuestsAdded").val("mpe111")
})
});
何が機能しているか: 2 つのリストを取得し、2 つのリスト間でアイテムを移動できます (左から右/右から左)。これは、私が見つけたjQueryスクリプトを使用しています。
これまでに読んだこととは異なり、2 つのオプションがあります。各イベントの後にサーバーに 1 回ポストバックします。2)クライアント側にとどまり、ポストバック時にコントローラーが使用できる非表示フィールドに選択されたアイテムのリストを保持します。オプション 2 を試すことにしました。ビュー モデルに次の 2 つの要素を追加しました。GuestsRemoved、GuestsAdded をリストとして追加しました。Razor ヘルパー構文を使用して、これらの要素をビューに追加しました。 (モデル => model.GuestsAdded)。次に、それを Jquery スクリプトに追加しました。$("#GuestsAdded").val("mpe111") というテスト値をコントローラーに割り当てることで、値がコントローラーに返されることを確認しました。
だからここで私は立ち往生しています。私が返そうとしているものである「HostName」を与える適切なプロパティを理解することができませんでした。このインスタンスのホスト名のリスト。
生の HTML は次のようになります: < select id="Guests" multiple="multiple" name="Guests"> MPE123
selectlist オブジェクトは次のとおりです。
var GuestVM = new SelectList(AssignedComputers,"tblHVHostHVHostId","HostName")
「ホスト名」へのアクセス方法がわかりません。どんな援助でも大歓迎です。