开发者

Passing list from view to controller, MVC3

I'm trying to create a tagging system for my project. I need the pass a string (for ex: "test1, test2, 开发者_JAVA百科test3") which will be binded to an entity as a list.

I'm using EF and my view inherits an entity, defined in EF. Without creating a view model, is it possible to do that?


Quite honestly view models is the way to go here.

But because you asked I will try to answer. IIRC EF models are partial classes, meaning that you could add properties to them, like this:

public partial class MyEFModel
{
    public IEnumerable<string> List
    {
        get
        {
            return SomeStringProperty.Split(',');
        }
        set
        {
            SomeStringProperty = string.Join(",", value.ToArray());
        }
    }
}

Another way to achieve this is to write a custom model binder, like this:

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();
    }
}

and then /home/index?values=val1,val2,val3 should bind correctly to the list.


There are couple of ways to achieve this:

  1. Custom Action Filter
  2. Custom Model Binder

These implementations can be found here:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜