asp.net MVC中的ArgumentNullException

时间:2014-05-08 11:29:39

标签: asp.net-mvc

您好我想将数据从一个列表框移动到另一个列表框但是当我移动数据时我得到错误... 我在查看

中为此完成了以下代码
<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/>

<buttontype="button"id="add"onclick="location.href='<%:Url.Action("AddNames", "MemberDetails") %>'">>></button>
<br/>

<br/>
<buttontype="button"id="remove"onclick="location.href='<%:Url.Action("RemoveNames", "MemberDetails") %>'"><<</button>

</td>

<td>
<%:Html.ListBoxFor(model=>model.objMemberAccessRights.RequestedSelected,newMultiSelectList(Model.objMemberAccessRights.RequestedNames,"Id","InstituteName",Model.objMemberAccessRights.RequestedSelected), new { size="8"}) %>
</td>

型号:

    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; }
    }

控制器:

        [NonAction]
public List<InstituteInformation> getAllInstituteNameList()
        {
var name = (from i indb.InstituteInformationDBSselect i).ToList();
return name;
        }

//
// GET: /MemberDetails/Create
public ActionResult Create()
        {
MemberDetailsWrapper MD = new MemberDetailsWrapper();
MD.objMemberAccessRights = new MemberAccessRights{ AvailableNames = getAllInstituteNameList(), RequestedNames = new List<InstituteInformation>() };

return View(MD);
        }


//AddNames
public ActionResult AddNames(MemberDetailsWrapper MD, string add)
        {
ModelState.Clear();
MemberAccessRights MAR=new MemberAccessRights();
RestoreSavedState(MAR);

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(MemberAccessRights MAR)
        {
MAR.RequestedNames = new List<InstituteInformation>();

if (!string.IsNullOrEmpty(MAR.SavedRequested))
            { 
string[] nameids = MAR.SavedRequested.Split(',');
var name = getAllInstituteNameList().Where(p =>nameids.Contains(p.InstituteName));
MAR.RequestedNames.AddRange(name);
            }
        }   

        #endregion

当我点击此&gt;&gt;按钮时,我收到错误: ArgumentNullException

这是因为: 当我在调试后检查它(RestoreSavedState(MAR);)时显示

AvailableNames null
AvailableSelected null
RequestedNames null
RequestedSelected null

这就是为什么它没有正常运行并显示异常 它应该像这样显示

AvailableNames null
AvailableSelected<Array of selected item> like this,{int[1]}
RequestedNames null
RequestedSelected null

所有这一切都发生了因为对象没有正确传递,任何人都可以告诉我如何删除这个错误

1 个答案:

答案 0 :(得分:0)

添加以下代码:

if (MD == null || MD.objMemberAccessRights == null)
{
//do nothing
}else{
MD.objMemberAccessRights.RequestedNames = newList<InstituteInformation>(); 
}

您可能有nullreference异常,因为其中一个对象未​​初始化。 为了使您的应用程序正常运行,您应该尝试找出这些值为空的原因