-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 に答える