我正在尝试为我的项目创建标记系统。我需要传递一个字符串(例如:“test1,test2,test3”),它将作为列表绑定到实体。
我正在使用EF,我的视图继承了一个在EF中定义的实体。如果不创建视图模型,是否可以这样做?
答案 0 :(得分:2)
老实说,看模特是去这里的方法。
但是因为你问我会尽力回答。 IIRC EF模型是部分类,这意味着您可以向它们添加属性,如下所示:
public partial class MyEFModel
{
public IEnumerable<string> List
{
get
{
return SomeStringProperty.Split(',');
}
set
{
SomeStringProperty = string.Join(",", value.ToArray());
}
}
}
实现此目的的另一种方法是编写自定义模型绑定器,如下所示:
public class MyBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value != null)
{
return value.AttemptedValue.Split(',');
}
return base.BindModel(controllerContext, bindingContext);
}
}
public class HomeController : Controller
{
public ActionResult Index(
[ModelBinder(typeof(MyBinder))] IEnumerable<string> values
)
{
return View();
}
}
然后/home/index?values=val1,val2,val3
应正确绑定到列表。
答案 1 :(得分:0)
有几种方法可以实现这一目标:
可以在这里找到这些实现:
Is it possible to change the querystring variable in ASP.NET MVC path before it hits the controller?