MVC3 2列表框在回发时交换项目captutre更改

时间:2013-04-03 19:26:28

标签: jquery asp.net-mvc-3 listbox postback

上周我一直在阅读关于这个主题的帖子,并且已经接近但仍然不完全在那里。任何帮助都会有所帮助。我有许多hyper-v服务器,我正在尝试不断更新分配给它的来宾VM。我有两个列表1已分配的客户机列表。第二个可用客人机器列表

我有以下内容:

视图模型:

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")

    })
});

工作原理:我有两个列表,能够在两者之间移动项目(从左到右/从右到左)。这是使用我发现的jQuery脚本。

到目前为止,我已经阅读了两个选项:1每个事件后回发到服务器。 2)留在客户端,在隐藏字段中保留所选项目的列表,这些字段在回发后可供控制器使用。 我决定尝试选项2。 我在我的视图模型中添加了两个元素:GuestsRemoved,GuestsAdded作为列表 我使用Razor助手语法将这些元素添加到我的视图中:@ html.HiddenFor(model =&gt; model.guestsRemoved)&amp; @ Html.HiddenFor(Model =&gt; model.GuestsAdded)。 接下来,我将它添加到我的Jquery脚本中。我通过为它分配测试值来验证值将返回到控制器:$(“#GuestsAdded”)。val(“mpe111”)

所以这就是我被困住的地方。我无法弄清楚给出“HostName”的正确属性,这正是我想要返回的。此实例中的主机名列表。

原始html看起来像: &LT; select id =“Guests”multiple =“multiple”name =“Guests”&gt; MPE123

选择列表对象是:
var GuestVM = new SelectList(AssignedComputers,“tblHVHostHVHostId”,“HostName”)

我无法弄清楚如何到达“主机名”。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

试试这个:

var listOfHostNHames = $(selectFrom + " :selected").text();