将视图从视图传递到控制器,MVC3

时间:2011-01-30 12:32:08

标签: c# asp.net-mvc entity-framework

我正在尝试为我的项目创建标记系统。我需要传递一个字符串(例如:“test1,test2,test3”),它将作为列表绑定到实体。

我正在使用EF,我的视图继承了一个在EF中定义的实体。如果不创建视图模型,是否可以这样做?

2 个答案:

答案 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)

有几种方法可以实现这一目标:

  1. 自定义操作过滤器
  2. Custom Model Binder
  3. 可以在这里找到这些实现:

    Is it possible to change the querystring variable in ASP.NET MVC path before it hits the controller?