私は次の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);} } }