使用MVC进行简单搜索,查看问题

时间:2011-09-11 08:05:52

标签: html asp.net-mvc

我的SearchUsers视图如下:

    <% using (Html.BeginForm())
   {%>
<fieldset>
    <legend>Fields</legend>
    <div class="editor-label">
        <%= Html.Label("Search Users:" %>
    </div>
    <div class="editor-field">
        <%= Html.TextBox("keyword") %>
    </div>
    <p>
        <input type="submit" value="Search" />
    </p>
</fieldset>
<%} %>
<table>
    <tr>
        <th>
            TITLE
        </th>
        <th>
            FIRSTNAME
        </th>
        <th>
            LASTNAME
        </th>
    </tr>
    <% foreach (var item in Model)
       { %>
    <tr>
        <td>
            <%= Html.ActionLink("GetProfile", "User", new { username=item.USERNAME }) %>
            |
            <%= Html.ActionLink("UpdateProfile", "User", new { username=item.USERNAME })%>
        </td>
        <td>
            <%= Html.Encode(item.TITLE) %>
        </td>
        <td>
            <%= Html.Encode(item.FIRSTNAME) %>
        </td>
        <td>
            <%= Html.Encode(item.LASTNAME) %>
        </td>
    </tr>
    <% } %>

在该行发出异常:

<% foreach (var item in Model)

我希望模型仅在执行搜索后才与数据绑定,但是当我第一次访问此视图时,它似乎尝试绑定数据。我该如何防止这种情况?

我的控制器是这样的:

        public ActionResult SearchUsers()
    {
        return View();
    }

    [HttpPost]
    public ActionResult SearchUsers(FormCollection collection)
    {
        DBServiceLinq db = new DBServiceLinq();
        Acctinfo acct = new Acctinfo();
        acct = db.SearchUsers(collection["keyword"]);
        return View(acct);

    }

我的SearchUsers方法如下:

    [WebMethod]
    public Acctinfo SearchUsers(string keyword)
    {
        var q = from acctinfo in db.Acctinfos
                where acctinfo.USERNAME.Contains(keyword)
                select acctinfo;
        Acctinfo a = new Acctinfo();
        a = q.First();
        return a;

    }

1 个答案:

答案 0 :(得分:1)

假设exectipon是一个空引用异常,可能是第一次设置视图:

public ActionResult SearchUsers()
{
    return View();
}

您的模型为空。假设您的模型是一个将在模型的构造函数中创建的List,您尝试过

return (new MyModel());

无论如何,在foreach之前的视图中,您可以检查模型是否为空

<% if(Model != null) {
   foreach(....)

<强>更新

此外,对帖子作出反应的方法应该返回一个列表

[HttpPost]
public ActionResult SearchUsers(FormCollection collection)
{
    DBServiceLinq db = new DBServiceLinq();
    IList<Acctinfo> acct = db.SearchUsers(collection["keyword"]);
    return View(acct);
}


[WebMethod]
public IList<Acctinfo> SearchUsers(string keyword)
{
    var q = (from acctinfo in db.Acctinfos
            where acctinfo.USERNAME.Contains(keyword)
            select acctinfo).ToList();        
    return q;
}