2013-12-13 3 views
1

У меня есть модель с полями XElement (некоторые из них не может быть пустым), как это:Как создать (или где посмотреть) дисплей и редактор шаблонов для класса XElement (MVC4, Razor)

public class Test 
{ 
    public int Id { get; set; } 
    public XElement Data { get; set; } // could not be null 
    public XElement Scheme { get; set; } // could be null 
    // other fields 
} 

Как я могу указать шаблоны отображения и редактора для XElement-полей этой модели? Поле для значения редактирования поля XElement должно быть похоже на многострочную строку. Пользователь просто мимо в поле некоторые XML-текст, как

<Element1 attr1="artrValue1" attr2="attrValue2"> 
    <SubElement1> 
     <!-- Other elements --> 
    </SubElement1> 
    <SubElement2 /> 
    <!-- Other elements --> 
</Element1> 

И этот текст должен быть преобразовать в значение XElement (XDocument.Parse (строка) .Root)

Я работаю с Razor MVC4

ответ

1

Вы можете разместить шаблоны пользовательских шаблонов до Views\Shared\EditorTemplates и отобразить шаблоны в каталогах Views\Shared\DisplayTemplates, рамки автоматически подберут их. В вашем случае, вам нужно создать файл XElement.cshtml:

@model System.Xml.Linq.XELement 
@Html.TextArea(string.Empty, Model == null ? string.Empty : Model.ToString()) 

После этого @Html.EditorFor(model => model.Sheme) сделает пользовательский шаблон.

Если вы хотите, чтобы автоматически заполнять поля XElement с вывешенные значениями, рассмотреть вопрос о создании пользовательской модели связующего:

public class XElementModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     return value == null ? null : XElement.Parse(value); 
    } 
} 

и зарегистрировать его в Global.asax:

protected void Application_Start() 
{ 
    ModelBinders.Binders.Add(typeof(XElement), new XElementModelBinder()); 
} 
Смежные вопросы