gpt4 book ai didi

asp.net-mvc - 如何将 URL 参数绑定(bind)到具有不同名称的模型属性

转载 作者:行者123 更新时间:2023-12-04 02:56:46 25 4
gpt4 key购买 nike

好的,假设我有一个这样的 URL,它是通过 HTTP 动词 GET 映射的到我在下面的 Controller 操作:

GET /foo/bar?sort=asc&r=true

如何将它绑定(bind)到我的模型 Bar在我的 Controller 操作中,我有以下内容:
class Bar {
string SortOrder { get; set; }
bool Random { get; set; }
}

public ActionResult FooBar(Bar bar) {
// Do something with bar
return null;
}

请注意,属性名称不会也不一定与 URL 参数的名称匹配。此外,这些是可选的 url 参数。

最佳答案

它不支持开箱即用,但您可以这样做:

class BarQuery : Bar { 

public string sort { get { return SortOrder; } set { SortOrder = value; } }
public bool r { get { return Random; } set { Random = value; } }
}

public ActionResult FooBar(BarQuery bar) {
// Do something with bar
}

您可以实现自定义 IModelBinder ,但手动映射要容易得多。

如果您可以更改 Bar 类,则可以使用此属性:
class FromQueryAttribute : CustomModelBinderAttribute, IModelBinder { 

public string Name { get; set; }

public FromQueryAttribute() { }

public FromQueryAttribute(string name) {
this.Name = name;
}

public override IModelBinder GetModelBinder() {
return this;
}

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
return controllerContext.HttpContext.QueryString[this.Name ?? bindingContext.ModelName];
}
}

class Bar {

[FromQuery("sort")]
string SortOrder { get; set; }

[FromQuery("r")]
bool Random { get; set; }
}

public ActionResult FooBar(Bar bar) {
// Do something with bar
return null;
}

关于asp.net-mvc - 如何将 URL 参数绑定(bind)到具有不同名称的模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com