Asp.net mvc 3 使用重定向操作时隐藏路由值 [HttpGet] 公共行动结果索引() { 返回视图(); } [HttpPost] 公共行动结果索引(HomeOfficeViewModel viewModel) { 返回重定向到操作(“搜索结果”、“HomeOffice”、viewModel); } 公共行动结果搜索结果(HomeOfficeViewModel viewModel) { if(viewModel.FirstName!=null&&viewModel.LastName==null&&viewModel.FullSsn==null) { List ph=_policyHolderRepository.Where(x=>x.FirstName==viewModel.FirstName.ToList(); 如果(ph值!=0) { var searchresults=来自ph值中的p 选择新的SearchResultsViewModel { FullSsn=p.Ssn, 全名=p.FirstName+“”+p.LastName, UserId=p.UserId }; TempData[“SearchedItem”]=>是“+”viewModel.FirstName+””; 返回视图(“SearchResults”,新的SearchResultsViewModel(){SearchResults=SearchResults.ToList()}); } 其他的 { ModelState.Clear(); AddModelError(“错误”,“搜索到的名字在我们的记录中不存在”); 返回视图(“索引”); } } 其他的 { 返回视图(); } }

Asp.net mvc 3 使用重定向操作时隐藏路由值 [HttpGet] 公共行动结果索引() { 返回视图(); } [HttpPost] 公共行动结果索引(HomeOfficeViewModel viewModel) { 返回重定向到操作(“搜索结果”、“HomeOffice”、viewModel); } 公共行动结果搜索结果(HomeOfficeViewModel viewModel) { if(viewModel.FirstName!=null&&viewModel.LastName==null&&viewModel.FullSsn==null) { List ph=_policyHolderRepository.Where(x=>x.FirstName==viewModel.FirstName.ToList(); 如果(ph值!=0) { var searchresults=来自ph值中的p 选择新的SearchResultsViewModel { FullSsn=p.Ssn, 全名=p.FirstName+“”+p.LastName, UserId=p.UserId }; TempData[“SearchedItem”]=>是“+”viewModel.FirstName+””; 返回视图(“SearchResults”,新的SearchResultsViewModel(){SearchResults=SearchResults.ToList()}); } 其他的 { ModelState.Clear(); AddModelError(“错误”,“搜索到的名字在我们的记录中不存在”); 返回视图(“索引”); } } 其他的 { 返回视图(); } },asp.net-mvc-3,hide,redirecttoaction,Asp.net Mvc 3,Hide,Redirecttoaction,viewModel中的值显示在url中,如下所示 我不应该在url中显示它们,因为我将发送ssn。有没有办法隐藏它们或者更好的方法 谢谢。重定向到操作将创建一个对命名操作的GET请求(在您的情况下为SearchResults),该操作可能正在尝试序列化视图模型字段。相反,您可以使用TempData [HttpGet] public ActionResult Index() { return View(); } [HttpPost]

viewModel中的值显示在url中,如下所示

我不应该在url中显示它们,因为我将发送ssn。有没有办法隐藏它们或者更好的方法


谢谢。

重定向到操作
将创建一个对命名操作的GET请求(
在您的情况下为SearchResults
),该操作可能正在尝试序列化视图模型字段。相反,您可以使用TempData

    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(HomeOfficeViewModel viewModel)
    {
        return RedirectToAction("SearchResults", "HomeOffice", viewModel);
    }

    public ActionResult SearchResults(HomeOfficeViewModel viewModel)
    {
        if (viewModel.FirstName != null && viewModel.LastName == null && viewModel.FullSsn == null)
        {
            List<Domain.Model.PolicyHolder> ph = _policyHolderRepository.Where(x => x.FirstName == viewModel.FirstName).ToList();
            if (ph.Count != 0)
            {
                var searchresults = from p in ph
                                    select new SearchResultsViewModel
                                               {
                                                   FullSsn = p.Ssn,
                                                   FullName = p.FirstName + " " + p.LastName,
                                                   UserId = p.UserId
                                               };
                TempData["SearchedItem"] = "<<< First Name >>> is '" + viewModel.FirstName + "'";
                return View("SearchResults", new SearchResultsViewModel() {SearchResults = searchresults.ToList()});
            }
            else
            {
                ModelState.Clear();
                ModelState.AddModelError("Error", "First Name searched does not exist in our records");
                return View("Index");
            }
        }

        else
        {
            return View();
        }
 }

我在SearchResults视图中有一个webgrid。您的帮助在首次加载SearchResults视图时仍然有效,但当我单击webgrid中的分页选项时,它将出现并点击SearchResults操作方法。然后TempData[“HomeOfficeViewModel1”]返回后将变为null。SearchResults操作方法和SearchResults视图之间存在往返关系。TempData[“HomeOfficeViewModel1”]不应为null,以便反复加载SearchResults视图。我怎样才能做到这一点?@Madhu我猜不出你是如何发布数据的,但是后续的帖子是否会发布到
索引
搜索结果
?如果对
索引
执行这些操作,则可以有条件地传递null。我会修改我的答案,但不会有什么不同。如果您发布到
SearchResults
(这就是您所说的,但是操作没有用
[HttpPost]
注释,那么应该没有问题。您可以进一步描述您的问题吗?[HttpGet]索引方法中,我将允许用户输入FirstName并提交搜索。在[HttpPost]中索引我正在使用RedirectToAction将viewmodel传递给[HttpGet]Searchresults。目前一切正常。由于我在RedirectToAction方法中将viewmodel作为路由值传递,因此url中出现了一些错误。如果我使用Tempdata,它将加载一次Searchresults视图,当断点到达[HttpGet]时,它将变为null再次搜索结果。这是我的问题。@Madhu您的SearchResults视图如何生成对[HttpGet]SearchResults操作的后续请求?我的搜索结果将加载到webgrid的SearchResults视图中,每页计数为15。当我单击网格的下一页时,它将生成请求[HttpGet]SearchResults。
[HttpPost]
public ActionResult Index(HomeOfficeViewModel viewModel)
{
    TempData["Field1"] = "Value1";
    TempData["HomeOfficeViewModel1"] = viewModel;
    return RedirectToAction("SearchResults", "HomeOffice", viewModel ?? null);
}

public ActionResult SearchResults(HomeOfficeViewModel viewModel)
{
    string field1 = TempData["Field1"].ToString();
    if(viewModel == null)
        viewModel = TempData["HomeOfficeViewModel1"] as HomeOfficeViewModel;
    return View(viewModel);
}