在 ASP.NET MVC ActionLink 中传递嵌套属性

4

我的操作接受一个模型,看起来像这样:

public class ClassListVM
{
    public ClassListVM()
    {
        Filter = new ClassFilterModel();
    }

    public ClassFilterModel Filter { get; set; }
    public PagedList<Class> Classes { get; set; }
}

public class ClassFilterModel
{
    public int? TermId { get; set; }
    public int? SubFormId { get; set; }
    public int? FormId { get; set; }
}

public ActionResult Index(ClassListVM model)
{
    model.Classes = classService.GetClasses(model.Filter);
    return View(model);
}

现在我想生成这样的URL:/Classes?Filter.SubFormId=1。使用以下代码,如何将Filter部分放入URL中:
<a href="@Url.Action("Details", "Classes", new {Filter.TermId = Model.TermId, Filter.SubFormId = subForm.SubFormId})">go</a>

正如您所看到的,这里无法使用Filter

1个回答

1
理论上,你可以这样构建它:
<a href="@Url.Action("Details", "Classes")?Filter.TermId=@Model.TermId&amp;Filter.SubFormId=@subForm.SubFormId">go</a>

大致上就是这样;将查询字符串嵌入客户端标记中,并仅注入参数。


我最终做成了这个,但希望有更好的方法。 - Shawn Mclean
5
也许可以使用字典来代替匿名类作为属性。在这种情况下,匿名类不能支持点符号表示法(如Filter.TermId)。可以尝试使用一个新的Dictionary<string, object>{ {"Filter.TermId", Model.TermId}}。 - Brian Mains

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接