Asp.net mvc 具有自更新功能的局部视图

Asp.net mvc 具有自更新功能的局部视图,asp.net-mvc,partial-views,Asp.net Mvc,Partial Views,我正在学习ASP.NETMVC,在我的实践项目(MVC音乐商店)中遇到了一个问题。我做了一个局部视图来搜索一个艺术家。我希望部分观点不带任何论据,而是独立运作 右半部分的局部视图 我有一个特定于视图的模型,用于艺术家搜索局部视图。模型如下: public class ArtistSearch { public string SearchString { get; set; } public List<Artist> SearchResult { get; set;

我正在学习ASP.NETMVC,在我的实践项目(MVC音乐商店)中遇到了一个问题。我做了一个局部视图来搜索一个艺术家。我希望部分观点不带任何论据,而是独立运作

右半部分的局部视图

我有一个特定于视图的模型,用于艺术家搜索局部视图。模型如下:

public class ArtistSearch
{
    public string SearchString { get; set; }
    public List<Artist> SearchResult { get; set; }

    public ArtistSearch()
    {
        SearchResult=new List<Artist>();
    }
}
 public ActionResult Search(string query)
        {
            ArtistSearch asResult = new ArtistSearch();
            if (query != null)
            {
                var temp = from a in db.Artists
                           where a.Name.Contains(query)
                           select a;

                asResult.SearchResult = temp.ToList();
                asResult.SearchString = query;
            }
            return PartialView(asResult);
        }
@model MvcMusicStore.Models.ArtistSearch


<div class="big-search-box">
    <form action="@Url.Action("Search","Artist")" method="post" role="form">
        <div class="input-group">
            @Html.TextBox("query", @Model.SearchString, new { @class = "form-control nrb input-lg", placeholder = "Input your search query..." })
            <div class="input-group-btn">
                <input type="submit" name="Send" value="Search" class="btn btn-primary btn-iconed btn-lg" />
            </div>
        </div>
    </form>
</div>
<div class="big-search-result-info clearfix">
    <div class="pull-left">Showing results for <strong>@Model.SearchString</strong>.</div>
    <div class="pull-right"><strong>@Model.SearchResult.Count</strong> artist(s) found.</div>
</div>

<table>
@foreach (var item in @Model.SearchResult)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            <a href="@item.Id" >
                <img src=@item.PhotoURL alt=@item.Name style="width:100px;height:70px;">
            </a>
        </td>
    </tr>
}
</table>
局部视图如下:

public class ArtistSearch
{
    public string SearchString { get; set; }
    public List<Artist> SearchResult { get; set; }

    public ArtistSearch()
    {
        SearchResult=new List<Artist>();
    }
}
 public ActionResult Search(string query)
        {
            ArtistSearch asResult = new ArtistSearch();
            if (query != null)
            {
                var temp = from a in db.Artists
                           where a.Name.Contains(query)
                           select a;

                asResult.SearchResult = temp.ToList();
                asResult.SearchString = query;
            }
            return PartialView(asResult);
        }
@model MvcMusicStore.Models.ArtistSearch


<div class="big-search-box">
    <form action="@Url.Action("Search","Artist")" method="post" role="form">
        <div class="input-group">
            @Html.TextBox("query", @Model.SearchString, new { @class = "form-control nrb input-lg", placeholder = "Input your search query..." })
            <div class="input-group-btn">
                <input type="submit" name="Send" value="Search" class="btn btn-primary btn-iconed btn-lg" />
            </div>
        </div>
    </form>
</div>
<div class="big-search-result-info clearfix">
    <div class="pull-left">Showing results for <strong>@Model.SearchString</strong>.</div>
    <div class="pull-right"><strong>@Model.SearchResult.Count</strong> artist(s) found.</div>
</div>

<table>
@foreach (var item in @Model.SearchResult)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            <a href="@item.Id" >
                <img src=@item.PhotoURL alt=@item.Name style="width:100px;height:70px;">
            </a>
        </td>
    </tr>
}
</table>
@model MvcMusicStore.Models.ArtistSearch
@TextBox(“query”、@Model.SearchString,new{@class=“form control nrb input lg”,placeholder=“input your search query…”)
显示@Model.SearchString的结果。
@Model.SearchResult.Count已找到艺术家。
@foreach(@Model.SearchResult中的var项)
{
@DisplayFor(modelItem=>item.Name)
}
我希望将此局部视图放置在网站的任何位置。假设我将它(使用RenderAction)放置在艺术家/索引控制器视图页面上

我试图实现的一个简单功能是,当我单击search时,它应该使用搜索结果自动更新部分视图。现在它正在把我转到艺术家/搜索页面


感谢您的耐心。

尝试使用Ajax.BeginForm,下面是一个示例:

行动

   public ActionResult Search(string query)
    {
        ArtistSearch asResult = new ArtistSearch();
        if (query != null)
        {
            var temp = from a in db.Artists
                       where a.Name.Contains(query)
                       select a;

            asResult.SearchResult = temp.ToList();
            asResult.SearchString = query;
        }
        return PartialView("MyParitalView",asResult);
    }
查看

  <script src="~/Scripts/jquery-1.10.2.min.js"></script>
  <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

     @using (Ajax.BeginForm("Search", "Home", new AjaxOptions { UpdateTargetId = "result" }))
     {
       <div class="input-group">
          @Html.TextBox("query", @Model.SearchString, new { @class = "form-control nrb input-lg", placeholder = "Input your search query..." })
          <div class="input-group-btn">
             <input type="submit" name="Send" value="Search" class="btn btn-primary btn-iconed btn-lg" />
           </div>
       </div>
    }
     <div id="result"></div>
@model MvcMusicStore.Models.ArtistSearch
    <div class="big-search-result-info clearfix">
        <div class="pull-left">Showing results for <strong>@Model.SearchString</strong>.</div>
        <div class="pull-right"><strong>@Model.SearchResult.Count</strong> artist(s) found.</div>
    </div>

    <table>
        @foreach (var item in @Model.SearchResult)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    <a href="@item.Id">
                        <img src=@item.PhotoURL alt=@item.Name style="width:100px;height:70px;">
                    </a>
                </td>
            </tr>
        }
    </table>

@使用(Ajax.BeginForm(“搜索”、“主页”、新的AjaxOptions{UpdateTargetId=“result”}))
{
@TextBox(“query”、@Model.SearchString,new{@class=“form control nrb input lg”,placeholder=“input your search query…”)
}
顶视图:我的顶视图

  <script src="~/Scripts/jquery-1.10.2.min.js"></script>
  <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

     @using (Ajax.BeginForm("Search", "Home", new AjaxOptions { UpdateTargetId = "result" }))
     {
       <div class="input-group">
          @Html.TextBox("query", @Model.SearchString, new { @class = "form-control nrb input-lg", placeholder = "Input your search query..." })
          <div class="input-group-btn">
             <input type="submit" name="Send" value="Search" class="btn btn-primary btn-iconed btn-lg" />
           </div>
       </div>
    }
     <div id="result"></div>
@model MvcMusicStore.Models.ArtistSearch
    <div class="big-search-result-info clearfix">
        <div class="pull-left">Showing results for <strong>@Model.SearchString</strong>.</div>
        <div class="pull-right"><strong>@Model.SearchResult.Count</strong> artist(s) found.</div>
    </div>

    <table>
        @foreach (var item in @Model.SearchResult)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    <a href="@item.Id">
                        <img src=@item.PhotoURL alt=@item.Name style="width:100px;height:70px;">
                    </a>
                </td>
            </tr>
        }
    </table>
@model MvcMusicStore.Models.ArtistSearch
显示@Model.SearchString的结果。
@Model.SearchResult.Count已找到艺术家。
@foreach(@Model.SearchResult中的var项)
{
@DisplayFor(modelItem=>item.Name)
}

只需稍加修改即可工作。必须将部分视图的所有控件放在具有id结果的div中。感谢您的帮助。您的实践项目是已发布的、在线教程还是可在GitHub上获得?是的,请为它添加链接:)这样我就可以学习了