加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 将部分视图返回到同一视图

发布时间:2020-12-16 09:36:16 所属栏目:asp.Net 来源:网络整理
导读:我有一个由3个部分视图组成的视图 屏幕左侧和右侧顶部的2个部分. 每个人都有一个互斥的搜索,每个帖子都回到他们自己的行动 这是呈现初始视图的操作 public ActionResult Index() { var model = new SearchOptionsViewModel(); return View(model); } 这是部
我有一个由3个部分视图组成的视图
屏幕左侧和右侧顶部的2个部分.
每个人都有一个互斥的搜索,每个帖子都回到他们自己的行动

这是呈现初始视图的操作

public ActionResult Index() {
        var model = new SearchOptionsViewModel();
        return View(model);
    }

这是部分视图之一的post动作:

[HttpPost]
    public ActionResult SearchByUser(UserSearchOptionsViewModel model) {
        if(ModelState.IsValid) {
            var list = SearchUserService.SearchByValue(model.LastName,model.Username,model.EmailAddress);
            if(list != null) {
                var resultsModel = new UserSearchResultsListViewModel();
                list.ForEach(item => resultsModel.Users.Add(new UserSearchResultsViewModel(item)));
                return RedirectToAction("SearchResults",resultsModel);
            }
        }
        return View(model);
    }

此模型成功发布并从数据库中获取数据并将其添加到viewmodel.
我迷失了如何在搜索条件下的同一屏幕上显示结果.

这是我希望通过先前操作接收模型并将部分渲染回原始视图的操作.我认为使用第三个SearchResults部分视图是答案,但这不起作用,它导航到它自己的页面显示结果而不是在同一页面上.

public ActionResult SearchResults(UserSearchResultsListViewModel model) {
        return PartialView(model);
    }

当我这样做时,模型总是以null为单位.我在这里缺少一些基本的东西……
如何在同一个视图中显示此数据?

解决方法

这就是我最终做的事情.它感觉不完全干净,但我保持方法的责任最小.如果有人有更好的建议,我想在没有TempData的情况下更好地做到这一点,请发布你的例子.

// Inital loaded view with 3 partial views
    // 2 for search criteria,1 for results
    public ActionResult Index() {
        var model = new SearchUsersViewModel();
        if(TempData["model"] != null)
            model = (SearchUsersViewModel)TempData["model"];
        return View(model);
    }

    // Post the search criteria model for search 
    // by user data (by last name,etc...)
    // Then redirect back to Index.
    // TempData will have the full model with results populated
    [HttpPost]
    public ActionResult SearchByUser(FilterUsersByUserDataViewModel model) {
        if(ModelState.IsValid) {
            var list = SearchUserService.SearchByValue(model.LastName,model.EmailAddress);
            if(list != null) {
                TempData["model"] = PrepareResultsModel(list);
                return RedirectToAction("Index");
            }
        }
        return View(model);
    }

    // This method just separates the concern of creating 
    //the new full model with search results populating the results view
    private SearchUsersViewModel PrepareResultsModel(List<SearchUserViewDTO> list) {
        var searchResults = new UserSearchResultsViewModel();
        list.ForEach(item => searchResults.Users.Add(new UserViewModel(item)));
        var model = new SearchUsersViewModel();
        model.UserSearchResultsViewModel = searchResults;
        return model;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读