在asp.net mvc的双列表框之间移动数据

本文关键字:之间 移动 数据 列表 asp net mvc | 更新日期: 2023-09-27 18:02:03

嗨,我是新的MVC现在与双列表框工作。我想把数据从listbox1移动到listbox2。为此,我使用以下代码:

<<p> 视图/strong>
<tbody>
    <tr>
        <td>
            <%:Html.HiddenFor(m=>m.objMemberAccessRights.Id) %>
            <%:Html.ListBoxFor(model =>model.objMemberAccessRights.AvailableSelected, newMultiSelectList(Model.objMemberAccessRights.AvailableNames, "Id", "InstituteName", Model.objMemberAccessRights.AvailableSelected), new { size="8"})%>
        </td>
        <td>
            <br/>
            <%:Html.ActionLink(">>", "AddNames", "MemberDetails") %>
            <br/>
            <br/>
            <%:Html.ActionLink("<<", "RemoveNames", "MemberDetails") %>
        </td>
        <td>
            <%:Html.ListBoxFor(model=>model.objMemberAccessRights.RequestedSelected,newMultiSelectList(Model.objMemberAccessRights.RequestedNames,"Id","InstituteName",Model.objMemberAccessRights.RequestedSelected), new { size="8"}) %>
        </td>
    </tr>
</tbody>
控制器

//
// GET: /MemberDetails/Create
public ActionResult Create()
{
    MemberDetailsWrapper MD = new MemberDetailsWrapper();
    MD.objMemberAccessRights = newMemberAccessRights{ AvailableNames = getAllInstituteNameList(), RequestedNames = new List<InstituteInformation>() };
    return View(MD);
}
//AddNames
public ActionResult AddNames(MemberDetailsWrapper MD, string add)
{
    ModelState.Clear();
    RestoreSavedState(MD);
    if (!add.Equals(">>"))
    {
        if (MD.objMemberAccessRights.AvailableSelected != null)
        {
            var names = getAllInstituteNameList().Where(p => MD.objMemberAccessRights.AvailableSelected.Contains(p.InstituteName));
            MD.objMemberAccessRights.RequestedNames.AddRange(names);
            MD.objMemberAccessRights.AvailableSelected = null;
        }
    }
    SaveState(MD);
    return View(MD);
}
//RemoveNames
public ActionResult RemoveNames(MemberDetailsWrapper MD, string remove)
{
    ModelState.Clear();
    RestoreSavedState(MD);
    if (!remove.Equals("<<"))
    {
        if (MD.objMemberAccessRights.RequestedSelected != null)
        {
            MD.objMemberAccessRights.RequestedNames.RemoveAll(p => MD.objMemberAccessRights.RequestedSelected.Contains(p.InstituteName));
            MD.objMemberAccessRights.RequestedSelected = null;
        }
        SaveState(MD);
        return View(MD);
    }
#regionSupportFuncs
public void SaveState(MemberDetailsWrapper MD)
{
    MD.objMemberAccessRights.SavedRequested = string.Join(",", MD.objMemberAccessRights.RequestedNames.Select(p =>p.InstituteName).ToArray());
    ////Available Names = All - Requested
    MD.objMemberAccessRights.AvailableNames = getAllInstituteNameList().Except(MD.objMemberAccessRights.RequestedNames).ToList();
}
//RestoreSavedState
public void RestoreSavedState(MemberDetailsWrapper MD)
{
    MD.objMemberAccessRights.RequestedNames = new List<InstituteInformation>();
    if (!string.IsNullOrEmpty(MD.objMemberAccessRights.SavedRequested))
    {
        string[] nameids = MD.objMemberAccessRights.SavedRequested.Split(',');
        var name = getAllInstituteNameList().Where(p =>nameids.Contains(p.InstituteName));
        MD.objMemberAccessRights.RequestedNames.AddRange(name);
    }
}
#endregion
在模型:

public class InstituteInformation
{
    public int Id { get; set; }
    public string InstituteName { get; set; }
}
public class MemberAccessRights
{
    public int Id { get; set; }
    public List<InstituteInformation> AvailableNames { get; set; }
    public string[] AvailableSelected { get; set; }
    public List<InstituteInformation> RequestedNames { get; set; }
    public string[] RequestedSelected { get; set; }
    public string SavedRequested { get; set; }
}

这里当我点击>>按钮,这个按钮返回错误:

对象引用未设置为对象的实例。描述:一个执行当前web时发生未处理的异常请求。有关的详细信息,请查看堆栈跟踪错误和它在代码中的起源。异常详细信息:系统。NullReferenceException:对象引用没有设置为实例一个物体的。

Source Error:   
Line 170:   public void    RestoreSavedState(MemberDetailsWrapper MD)
Line 171:   { 
Line 172:       MD.objMemberAccessRights.RequestedNames = new List<InstituteInformation>();
Line 173:
Line 174:       if (!string.IsNullOrEmpty(MD.objMemberAccessRights.SavedRequested))

在asp.net mvc的双列表框之间移动数据

您的对象为空(即MD.objMemberAccessRights)。MVC不会在没有调整的情况下将其传递回整个模型。尤其是列表

最简单的解决方案是假设列表为空,在每个请求之后重新构建列表。通过你的代码的外观,你不是持久的数据,但我认为你会在最后?

你需要做的是在项目被移动后保持它,然后重新查询dB来重新创建列表。

您可以使用jquery来避免所有这些与dB相关的内容,但这也有其自身的挑战。