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(...) 方法中,以下行始终返回一个不为空的 List。

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

return result.ToList();

在结果为空的情况下,result.ToList() 将返回一个包含 0 个项目的列表。收到列表后,您将在控制器的此行上分配它:

ViewBag.searchClass = searchClass;

一旦进入您的视野,您正在检查:

<% if (ViewBag.searchClass !=null)

这将永远是正确的,因为您返回一个空列表。

如果您想根据您发布的代码查看是否返回了正确的结果,则不应仅依赖列表是否为空。相反,您应该这样做:

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

所以你有这个代码:

公共 ActionResult Search() { string userId = Request["UserId"]; 字符串电子邮件 = 请求 [“电子邮件”] ?? 字符串。空;字符串 lastFourdigits = 请求["LastFourDigits"] ?? 字符串。空;

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 或为空,因此 view 将为“false”。

由于我们采取相反的观点,这给了我们 true,然后执行获取由 Users 方法返回的 SearchClass 对象列表的代码。现在,根据用户的返回值(未给出),您可能会返回一个空列表 (new List()) 而不是 null,这意味着当您将 searchClass 设置为 ViewBag.searchClass 时,您将永远不要将其设置为空。

于 2012-09-26T16:36:31.367 回答