ASP.NET MVC - Custom Model Binder for ID fields

与世无争的帅哥 提交于 2019-12-24 00:44:39

问题


i have the following entities:

public class Category
{
    public virtual int CategoryID { get; set; }

    [Required(ErrorMessage = "Section is required")]
    public virtual Section Section { get; set; }

    [Required(ErrorMessage = "Category Name is required")]
    public virtual string CategoryName { get; set; }
}

public class Section
{
    public virtual int SectionID { get; set; }
    public virtual string SectionName { get; set; }
}

Now within my add category view i have a textbox to enter the SectionID eg:

<%= Html.TextBoxFor(m => m.Section.SectionID) %>

I'd like to create a custom model binder to have the following logic:

If the model key ends with ID and has a value (a value was inserted into the textbox) then set the parent object (Section in this example) to Section.GetById(value entered) else set the parent object to null.

I'd really appreciate the help here as this has been baffling me for a while. Thanks


回答1:


I posted a model binder on this question that uses an IRepository to fill foreign keys if they are present. you could modify it to suit your purpose better.




回答2:


Using the solution posted by dave thieben i have come up with the following:

public class CustomModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        if (bindingContext.ModelType.Namespace.EndsWith("Models.Entities") && value != null && (Utilities.IsInteger(value.AttemptedValue) || value.AttemptedValue == ""))
        {
            if (value.AttemptedValue != "")
                return Section.GetById(Convert.ToInt32(value.AttemptedValue));
            else
                return null;
        }
        else
            return base.BindModel(controllerContext, bindingContext);
    }
}

This works nicely, however it doesn't select the right value when the form is posted back and using a drop down list. I can see why but so far my attempts to fix it have been in vain. I'd appreciate it once more if you could help.



来源:https://stackoverflow.com/questions/3636747/asp-net-mvc-custom-model-binder-for-id-fields

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!