If you are going to use custom ViewModel (complex Model) in ASP.NET MVC 2, you may always get a null Returns in Form when call Html.EditorFor(p => p.PageContent) If you review ASP.NET MVC 2 BindModel() Source, you see:
public virtual object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
            if (bindingContext == null) {
                throw new ArgumentNullException("bindingContext");
            }
            bool performedFallback = false;
            if (!String.IsNullOrEmpty(bindingContext.ModelName) && !DictionaryHelpers.DoesAnyKeyHavePrefix(bindingContext.ValueProvider, bindingContext.ModelName)) {
                // We couldn't find any entry that began with the prefix. If this is the top-level element, fall back
                // to the empty prefix.
                if (bindingContext.FallbackToEmptyPrefix) {
                    bindingContext = new ModelBindingContext() {
                        Model = bindingContext.Model,
                        ModelState = bindingContext.ModelState,
                        ModelType = bindingContext.ModelType,
                        PropertyFilter = bindingContext.PropertyFilter,
                        ValueProvider = bindingContext.ValueProvider
                    };
                    performedFallback = true;
                }
                else {
                    return null;
                }
            }
            // Simple model = int, string, etc.; determined by calling TypeConverter.CanConvertFrom(typeof(string))
            // or by seeing if a value in the request exactly matches the name of the model we're binding.
            // Complex type = everything else.
            if (!performedFallback) {
                ValueProviderResult vpResult;
                bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName, out vpResult);
                if (vpResult != null) {
                    return BindSimpleModel(controllerContext, bindingContext, vpResult);
                }
            }
            if (TypeDescriptor.GetConverter(bindingContext.ModelType).CanConvertFrom(typeof(string))) {
                return null;
            }
            return BindComplexModel(controllerContext, bindingContext);
        }The Controller action I defined to hand Create action
public ActionResult Create(EnterpriseSearch seach)
Thus causing the DefaultModelBinder find the Search model then it is not match with EnterpriseSearch model => search property always null.
So, your have to change your Create action like this (Model name and parameter name is the same characters: EnterpriseSearch enterpriseSearch)
public ActionResult Create(EnterpriseSearch enterpriseSearch)
Không có nhận xét nào:
Đăng nhận xét