У меня есть следующий сценарий: базовый проект C# со всеми доменами данных (пользовательские типы), которые используются всеми другими проектами в компании. Так что немного изменить его.MVC Свойство пользовательского типа не является обязательным в моей модели
Теперь мы создаем наш первый MVC проект с этим базовым проектом в качестве ссылки, и модель привязки не работает для свойств этих строк пользовательских типов:
[Serializable]
[TypeConverter(typeof(ShortStrOraTypeConverter))]
public class ShortStrOra : BaseString
{
public ShortStrOra()
: this(String.Empty)
{
}
public ShortStrOra(string stringValue)
: base(stringValue, 35)
{
}
public static implicit operator ShortStrOra(string stringValue)
{
return new ShortStrOra(stringValue);
}
public static implicit operator string(ShortStrOra value)
{
if (value == null)
{
return null;
}
else
{
return value.ToString();
}
}
public void Add(object o)
{
}
}
TypeConverter:
public class ShortStrOraTypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
return true;
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
return new ShortStrOra(Convert.ToString(value));
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string))
return ((ShortStrOra)value).ToString();
return base.ConvertTo(context, culture, value, destinationType);
}
}
И в моем простом тесте, с этим единственным классом, свойство Name не было привязано, но Lastname имеет.
public class TesteModel
{
public ShortStrOra Name {get; set;}
public String Lastname { get; set; }
public TesteModel() { }
}
Мое мнение:
@using (Html.BeginForm("EditMember", "Home", FormMethod.Post, new { @id = "frmEditMembers" }))
{
@Html.TextBoxFor(m => m.Name)<br />
@Html.TextBoxFor(m => m.Lastname)
<input type="submit" value="Salvar" />
}
Мой контроллер:
public ActionResult EditMember(TesteModel model)
{
return View("Index", model);
}
Наконец, где проблема? Сериализация? Модель привязки? Конвертер? Я не знаю, куда идти. Нет ошибки или исключения.
Любые идеи? Thanks
Вы на самом деле не сказал, что проблема вы столкнулись? С чем вы столкнулись? – Oliver
попробуйте @ Html.EditorFor() вместо TextBoxFor. Что вы видите в Фидлере, когда отправляете форму? все необходимые данные проходят? – trailmax