powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / При использовании TypeConverter в action не получается связать данные формы с моделью MVC3
2 сообщений из 2, страница 1 из 1
При использовании TypeConverter в action не получается связать данные формы с моделью MVC3
    #37661777
mvc_new_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Недавно изучаю MVC, поэтому наверно че-то делаю неправильно. Подскажите пож-та.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
[TypeConverter(typeof (CompanyConverter))]
    public class Company : DomainObject
    {
        private string _contacts = string.Empty;
        private string _name = string.Empty;
        private string _description = string.Empty;

        public virtual string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        public virtual string Description
        {
            get { return _description; }
            set { _description = value; }
        }

        public virtual string Contacts
        {
            get { return _contacts; }
            set { if (value != null) _contacts = value.Trim(); }
        }
}

public class CompanyConverter : TypeConverter
    {
        
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {   
            // метод почему-то никогда не вызывается MVC, даже если CanConvertFrom возвращает true
            // хотя в других приложениях вызывается
            //...
            return new Company();
        }

        
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
           // MVC этот метод вызывает

            return true; // если false то модель связывается с формой нормально
                        
            //return sourceType == typeof (string) || base.CanConvertFrom(context, sourceType);
        }
 // ...
}
public class CompaniesController : Controller
    {
         //...
        [HttpPost]
        public ActionResult Edit(int id, Company model)
        {
            // здесь приезжает в model - null,
            // если typeсonverter убираю или CanConvertFrom возвращает false - все работает нормально

            if (!ModelState.IsValid)
                return View(model);
            
            var company = CompanyService.GetById(id);
            company.Name = model.Name;
            company.Description = model.Description;
            company.Contacts = model.Contacts;
            company.State = model.State;

            CompanyService.SaveOrUpdate(company);
            return RedirectToAction("Index");
            
        }


        [HttpPost]
        public ActionResult Create(Company model)
        {
            if (!ModelState.IsValid)
                return View(model);
            
            CompanyService.SaveOrUpdate(model);
            return RedirectToAction("Index");
        }

}



Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
@using (Html.BeginForm())
{
<dl>
    <dt>Name:</dt><dd>@Html.TextBoxFor(m => m.Name)</dd>
    <dt>Description:</dt><dd>@Html.TextAreaFor(m => m.Description, 5, 60, new {style = "width:300px"})</dd>
    <dt>e-Mails:</dt><dd>@Html.TextAreaFor(m => m.Contacts, 5, 60, new {style = "width:300px"})</dd>
     <dt></dt> <dd><input type="submit" value="Save" class="button save" /></dd>
</dl>
}




От typeconverter отказаться не хочется, так как используется в других (webforms) приложениях.

DefaultModelBinder и TypeConverter не работают совместно?
...
Рейтинг: 0 / 0
При использовании TypeConverter в action не получается связать данные формы с моделью MVC3
    #37665956
mvc_new_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Залез в исходники MVC3, там в DefultModelBinder есть проверка свойства ModelMetadata.IsComplexType
Код: c#
1.
2.
3.
4.
5.
6.
7.
public virtual object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
...
 if (!bindingContext.ModelMetadata.IsComplexType) {
                return null;
            }
...
}



Код: c#
1.
2.
3.
4.
5.
public virtual bool IsComplexType {
            get {
                return !(TypeDescriptor.GetConverter(ModelType).CanConvertFrom(typeof(string)));
            }
        }



Те если TypeConverter есть и может конвертировать из строки, то забота разработчика получать модель.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / При использовании TypeConverter в action не получается связать данные формы с моделью MVC3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]