gpt4 book ai didi

asp.net - MVC 3 搜索路径

转载 作者:行者123 更新时间:2023-12-02 13:39:37 27 4
gpt4 key购买 nike

我正在开发一个具有动态数量的复选框和价格范围的搜索。我需要一条映射如下所示的路线:

/Filter/Attributes/Attribute1, Attribute2, Attribute3/Price/1000-2000

这是一个好方法吗?我怎样才能走这条路线?

最佳答案

routes.MapRoute(
"FilterRoute",
"filter/attributes/{attributes}/price/{pricerange}",
new { controller = "Filter", action = "Index" }
);

并在您的索引操作中:

public class FilterController: Controller
{
public ActionResult Index(FilterViewModel model)
{
...
}
}

其中FilterViewModel:

public class FilterViewModel
{
public string Attributes { get; set; }
public string PriceRange { get; set; }
}

如果您希望 FilterViewModel 看起来像这样:

public class FilterViewModel
{
public string[] Attributes { get; set; }
public decimal? StartPrice { get; set; }
public decimal? EndPrice { get; set; }
}

您可以为此 View 模型编写一个自定义模型绑定(bind)器,它将解析各种路由标记。

如果您需要示例,请联系我。

<小时/>

更新:

根据要求,这里有一个示例模型绑定(bind)器,可用于将路由值解析为相应的 View 模型属性:

public class FilterViewModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var model = new FilterViewModel();
var attributes = bindingContext.ValueProvider.GetValue("attributes");
var priceRange = bindingContext.ValueProvider.GetValue("pricerange");

if (attributes != null && !string.IsNullOrEmpty(attributes.AttemptedValue))
{
model.Attributes = (attributes.AttemptedValue).Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}

if (priceRange != null && !string.IsNullOrEmpty(priceRange.AttemptedValue))
{
var tokens = priceRange.AttemptedValue.Split('-');
if (tokens.Length > 0)
{
model.StartPrice = GetPrice(tokens[0], bindingContext);
}
if (tokens.Length > 1)
{
model.EndPrice = GetPrice(tokens[1], bindingContext);
}
}

return model;
}

private decimal? GetPrice(string value, ModelBindingContext bindingContext)
{
if (string.IsNullOrEmpty(value))
{
return null;
}

decimal price;
if (decimal.TryParse(value, out price))
{
return price;
}

bindingContext.ModelState.AddModelError("pricerange", string.Format("{0} is an invalid price", value));
return null;
}
}

它将在 Global.asaxApplication_Start 中注册:

ModelBinders.Binders.Add(typeof(FilterViewModel), new FilterViewModelBinder());

关于asp.net - MVC 3 搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275659/

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