-1

我有以下 Ajax Begin 表单:-

@using (Ajax.BeginForm("AssignUsers", "SecurityGroup", 


    new AjaxOptions
{
    HttpMethod = "POST",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "UsersAssignment"//,
   // LoadingElementId = "progress",
   // OnSuccess = "reenable"
}))
{
    @Html.HiddenFor(Model => Model.GroupID)
    @Html.AntiForgeryToken()
<p>Search  <input  placeholder="Search by name.." name="selectedUserNames" type="text" data-autocomplete-source= "@Url.Action("AutoComplete", "SecurityGroup")" /> </p>

<input type="submit" value="Search" />
}

但问题是用户没有在“测试输入”字段中输入任何值,然后一个空字符串将被传递到数据库。那么我如何检查数组是否包含空字符串。

将处理视图的操作方法是:-

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult AssignUsers(int GroupID, string[] selectedUserNames, string[] currentUserNames)
        { try
            {if (ModelState.IsValid)
               {repository.AssignUserGroup(GroupID, selectedUserNames, currentUserNames);
                    repository.Save();
                    if (!Request.IsAjaxRequest())
                    {
                        return RedirectToAction("Details", new { id = GroupID });
                    }
                    else if (Request.IsAjaxRequest())
                    {var ADUsers = repository.GetADUsers(null);
                        var group = repository.FindAllGroup(GroupID);
                        PopulateAssignedUsersData(group, ADUsers);
                        return PartialView("_Group", group);

并且存储库方法是:-

public void AssignUserGroup(int id, string[] selectedUsers, string[] currentusernames)
        {
            var usergroups = tms.UserGroups.Where(a=>a.GroupID == id);
            foreach (var ug in usergroups)
            {
                if (currentusernames != null)
                {for (int c = 0; c < currentusernames.Count(); c++)
                    {if (ug.UserName == currentusernames[c])
                        {tms.UserGroups.Remove(ug);
                        }}}}
                if( selectedUsers !=null){
               for (int i = 0; i < selectedUsers.Count(); i++)
               {UserGroup usergroup = new UserGroup();
                   usergroup.GroupID = id;
                   usergroup.UserName = selectedUsers[i];
                   tms.UserGroups.Add(usergroup);} } }
4

2 回答 2

1

你可以这样做:

 if( string.IsNullOrWhiteSpace ( your string; for example : currentusernames[c] ) ) 
 {
    -- do something or throw an exception--
 }   

 else
 {
   -- do something else --
 }
于 2013-07-16T12:58:28.110 回答
0

您需要在某个时候验证您的输入。这通常使用模型完成,然后检查ModelState. 但是,由于您要生成复杂的属性,因此您最好在程序中进一步验证输入。

更新您的存储库方法以验证提供给它的参数。

public void AssignUserGroup(int id, string[] selectedUsers, string[] currentusernames)
{
    if (id < 1) throw new ArgumentExpcetion("id");
    if (selectedUsers.Length == 0) throw new ArgumentException("selectedUsers");
    if (currentusernames.Length == 0) throw new ArgumentException("currentusernames");

    var usergroups = tms.UserGroups.Where(a=>a.GroupID == id);

    // May need to user .Count instead of .Length
    if (usergroups == null || usergroups.Length == 0) throw new ArgumentOutOfRangeException("id");

    foreach (var ug in usergroups)
    {
       if (currentusernames != null)
       {
          for (int c = 0; c < currentusernames.Count(); c++)
          {
              if (ug.UserName == currentusernames[c])
              {
                  tms.UserGroups.Remove(ug);
              }
          }
       }
    }

    if( selectedUsers !=null)
    {
       for (int i = 0; i < selectedUsers.Count(); i++)
       {
           UserGroup usergroup = new UserGroup();
           usergroup.GroupID = id;
           usergroup.UserName = selectedUsers[i];
               tms.UserGroups.Add(usergroup);
       }
    }
}

然后更新您的控制器以处理各种预期的异常。

try
{
   repository.AssignUserGroup(GroupID, selectedUserNames, currentUserNames);
} catch (Exception e)
{
   if (e is ArgumentException || e is ArgumentOutOfRangeException)
   {
       return redirect("Error");// Show an error view or message etc
   }

   throw; // Allow other exceptions to bubble
}
于 2013-07-16T13:13:27.200 回答