【问题标题】:.net core viewmodel providing route parameters.net 核心视图模型提供路由参数
【发布时间】:2018-08-22 15:41:32
【问题描述】:

我有一个视图模型类,它有一堆不同的路由参数作为它的属性。

public class FiltersVM
{
    public string parmOne {get; set;}
    public string parmTwo {get; set;}
    public string parmThree {get; set;}
    //etc
}

在我的控制器上,当我通过匹配的名称发送这些参数时,它会正确使用这些参数,例如:

<a asp-route-parmOne="Hello" asp-route-parmTwo="Dave" asp-action="Index">Link</a>

这里是控制器的一个例子(它的一部分):

public async Task<IActionResult> Index(FiltersVM filtersVM, List<string> messages, string searchString)            
{
    //do something with filtersVM.parmOne etc <--This works
}

问题: 当我从一个动作转到另一个动作时

public async Task<IActionResult> QuickTask(FiltersVM filtersVM, List<string> messages, string searchString)            
{
    //do something with filtersVM.parmOne etc <-- this works

    Return RedirectToAction(nameof(Index), new { filtersVM});
}

这会将我送回 Index 控制器,但它不会将 ViewMOdel 分解为其路由部分。我返回的 URL 如下所示:

https://localhost:44398/{ControllerName}?filtersVM=ProjectName.ViewModels.FiltersVM&{other route parameters not included in Viewmodel}

所以,第二个控制器正确地使用了 VM 参数来完成它的工作,但是当它完成并尝试重定向时,它就出现了问题。有什么想法吗?

我试图避免创建这样的重定向。我还没有尝试过,但我敢打赌它会起作用,我有很多参数,所以这并不理想:

Return RedirectToAction(nameof(Index), new { parmOne = filtersVM.parmOne, parmTwo = filtersVM.parmTwo, parmThree = filtersVM.parmThree });

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc


    【解决方案1】:

    filtersVM 已经是一个对象,所以它只是

    return RedirectToAction(nameof(Index),filtersVM);
    

    这会将模型的每个属性正确序列化为查询字符串。

    但请注意,该方法使用 .ToString() 序列化属性 - 它不会正确序列化复杂对象或集合的属性。

    【讨论】:

    • 是的,一旦你解释了它就说得通了。
    • 有什么方法可以使用 将模型作为输入提交我试过了,但是没有用,但是如果有类似的请告诉我
    • 我遇到了一个问题,如果我也尝试返回一个单独的 List 作为参数,它会导致上面的错误(它清除所有现有的参数并且那里什么都没有) .有什么方法可以使用上述模型,但还包括额外的路由参数?
    • 问题 - 你能从重定向到动作中路由更多的视图模型吗?我找不到办法做到这一点。我应该对 SO 提出一个新问题吗?
    • 没有。您可以在视图模型中包含 searchString 使其序列化,但您不能包含 List&lt;string&gt; - 要在 url 中发送 List&lt;T&gt;,您需要手动生成 ..&amp;[0].messages=someValue&amp;[1].messages=anotherValue&amp;...
    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多