0

Aspxエンジン

テキストボックスに無効なユーザーIDを入力して検索を押すと、「クラスが見つかりません」と表示されるはずです。これで「検索結果」が表示されます。elseステートメントにヒットしていないようです。

html

<div align="center">
    <form id="searchUser" method="post" action="Search">
        <table align="center">
    <tr>
        <td class="label">
            Enter ID:
        </td>
        <td>
            <input type="text" name="UserId" id="UserId" value="<%=(string)(ViewBag.userid)%>" />
        </td>
    </tr>
      <tr style ="display:none;">
        <td class="label">
            Email:
        </td>
        <td>
            <input type="text" name="Email" id="Text1" value="<%=(string)(ViewBag.email)%>" />
        </td>
    </tr>
      <tr style ="display:none;">
        <td class="label">
            lastFourDigits:
        </td>
        <td>
            <input type="text" name="LastFourDigits" id="Text2" value="<%=(string)(ViewBag.lastFourDigits)%>" />
        </td>
    </tr>
    <tr>
        <td>
            <button class="searchButton" id="searchButton">Search</button>
        </td>
    </tr>
  </table>
 </form>
  </div>
  <hr /> 

  <% if (ViewBag.searchClass !=null)
    { %>
    <h2>Search Resuls</h2>
    <br />
    <%List<AAlexUsers.Models.SearchClass> searchClassList= ViewBag.searchClass;%>
    <%if(searchClassList.Count>0)
    <table>
          <%foreach (AAlexUsers.Models.SearchClass searchClass in searchClassList)
     {%>
      <tr>
         <td>
            UserID:
        </td>
        <td class="content">
          <%=searchClass.userId%>
        </td>
    </tr>
    <tr>
        <td>
            Email:
        </td>
        <td class="content">
         <%=searchClass.email%>
        </td>
    </tr>
    <tr>
        <td>
        Last Four Digits:
        </td>
        <td class="content">
          <%=searchClass.lastFourdigits%>
         </td>
    </tr>
    <%} %>
    <%} %>
 </table>

    <%} else %>
 <%{ %>
    <h2>No Class found.</h2>
 <%} %>

コントローラ

public ActionResult Search()
{
    string userId = Request["UserId"];
    string email = Request["Email"] ?? string.Empty;
    string lastFourdigits = Request["LastFourDigits"] ?? string.Empty;

    bool view = false;

    if (string.IsNullOrEmpty(userId))
    {
        view = true;
    }
    if (!view)
    {
        List<AAlexUsers.Models.SearchClass> searchClass = 
            AAlexUsers.Models.SearchClass.Users(userId,email,lastFourdigits);
        {
            ViewBag.searchClass = searchClass;
            ViewBag.lastFourdigits = lastFourdigits;
            ViewBag.userId = userId;
            ViewBag.email = email;
        }
    }
    return View();
}

モデル

public class SearchClass
{
    public string userId { get; set; }
    public string email { get; set; }
    public string lastFourdigits { get; set; }

    public static List<AAlexUsers.Models.SearchClass> 
        Users(string userId, string email, string lastFourdigits)   
    {
        SearchClass Alex = new SearchClass();
        Alex.userId = "1234";
        Alex.email = "Alex@gmail.com";
        Alex.lastFourdigits = "1885";

        SearchClass Emilio = new SearchClass();
        Emilio.userId = "0928";
        Emilio.email = "Cubano@gmail.com";
        Emilio.lastFourdigits = "0706";

        SearchClass Ulysses = new SearchClass();
        Ulysses.userId = "0914";
        Ulysses.email = "lysses@gmail.com";
        Ulysses.lastFourdigits = "01zx";

        var list = new List<SearchClass>();
        list.Add(Alex);
        list.Add(Emilio);
        list.Add(Ulysses);


        IEnumerable<SearchClass> result = list;
        if (!string.Empty.Equals(userId))
            result = result.Where(u => u.userId == userId);

        return result.ToList();
    }
4

2 に答える 2

1

まず、コントローラーでsearchClassを作成します。

List<AAlexUsers.Models.SearchClass> searchClass = AAlexUsers.Models.SearchClass.Users(userId,email,lastFourdigits);   

Users(...)メソッドでは、次の行は常にnullではないリストを返します。

result = result.Where(u => u.userId == userId);

return result.ToList();

結果がnullの場合、result.ToList()は0項目を含むリストを返します。リストを受け取ったら、コントローラーのこの行にリストを割り当てます。

ViewBag.searchClass = searchClass;

ビューに入ると、次のことを確認しています。

<% if (ViewBag.searchClass !=null)

空のリストを返すため、これは常にtrueになります。

投稿されたコードに基づいて適切な結果が返されたかどうかを確認したい場合は、リストがnullであるかどうかだけに頼るべきではありません。代わりに、これを行う必要があります。

<% if (ViewBag.searchClass !=null && ViewBag.searchClass.Count > 0)
于 2012-09-26T16:36:44.923 に答える
0

したがって、次のコードがあります。

public ActionResult Search(){string userId = Request ["UserId"]; string email = Request ["Email"] ?? string.Empty; string lastFourdigits = Request ["LastFourDigits"] ?? string.Empty;

bool view = false;

if (string.IsNullOrEmpty(userId))
{
    view = true;
}
if (!view)
{
    List<AAlexUsers.Models.SearchClass> searchClass = 
        AAlexUsers.Models.SearchClass.Users(userId,email,lastFourdigits);
    {
        ViewBag.searchClass = searchClass;
        ViewBag.lastFourdigits = lastFourdigits;
        ViewBag.userId = userId;
        ViewBag.email = email;
    }
}
return View();

}

コントローラー用。無効なユーザーを入力したと言います。これは、ユーザー名が入力されていることを意味します。したがって、userIdはnullまたは空ではないため、ビューは「false」になります。

ビューの反対をとるので、trueが得られ、Usersメソッドによって返されるSearchClassオブジェクトのリストを取得するコードが実行されます。これで、Usersの戻り値(指定されていない)によっては、nullではなく空のリスト(new List())が返される場合があります。つまり、searchClassをViewBag.searchClassに設定すると、次のようになります。 nullに設定しないでください。

于 2012-09-26T16:36:31.367 に答える