我有一个类,它是从一个 xml 字符串创建和填充的,为了示例目的,我已经简化了它:
[XmlRoot("Person")]
public sealed class Person
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Location")]
public string Location { get; set; }
[XmlElement("Emails", Type = typeof(PersonEmails)]
public PersonEmails Emails { get; set; }
}
public class PersonEmails
{
[XmlElement("Email", Type = typeof(PersonEmail))]
public PersonEmail[] Emails { get; set; }
}
public class PersonEmail
{
[XmlAttribute("Type")]
public string Type { get; set; }
[XmlText]
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为了提取信息,我试图将它们加载到另一个类中,这很简单:
public class TransferObject
{
public …Run Code Online (Sandbox Code Playgroud) 如果之前已经回答道歉,我找不到与我的问题相符的任何内容.
我有一个包含部分视图的视图,在提交视图时,部分视图中的数据不会发送到控制器.我理解如果我使用编辑器模板,这应该可以工作,但是我无法使用它,因为我需要来自Partial内部主模型的数据.
我的创建视图(简化):
@model CreateXmlSchemaModel
@using (Html.BeginForm("Create", "XmlSchema", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
<div class="editor-label">
@Html.LabelFor(m => m.XmlSchema.Name)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.XmlSchema.Name)
</div>
<div id="fieldmapping">
@Html.Partial("_XmlFieldMapping")
</div>
<div>
<input type="submit" value="Create" class="button" />
</div>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
我的模型结构(简化):
public abstract class XmlSchemaModelContainerBase
{
public IEnumerable<string> BusinessObjects { get; set; }
public IEnumerable<XmlInputFieldModel> XmlFields { get; set; }
public IEnumerable<string> BusinessObjectFields { get; set; }
}
public class XmlSchemaModelContainer : XmlSchemaModelContainerBase
{
public XmlSchemaModel XmlSchema { …Run Code Online (Sandbox Code Playgroud) 我正在将一些XML反序列化到我的课程中,这一切都很好.我想要发生的是,如果XML不包含我的一个类属性的元素,而不是将该属性设置为null,我希望它相当于String.Empty.
例如,这是XML:
<Person>
<Title>Mr</Title>
<FullName>John Smith</FullName>
</Person>
Run Code Online (Sandbox Code Playgroud)
这是班级:
[XmlRoot("Person")]
public sealed class PersonObject
{
[XmlElement("Title")]
public string NamePrefix { get; set; }
[XmlElement("FullName")]
public string FullName { get; set; }
[XmlElement("JobTitle")]
public string JobTitle { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
目前,如果我反序列化到此对象,JobTitle将设置为null.我希望将其设置为空字符串,就像我在XML中传递JobTitle一样,但将值设置为空.
是否可以使用序列化方法中的某种属性来执行此操作?
我刚刚注册了,这是我的第一篇文章,所以如果问题不是最好,请耐心等待.我看了一下,找不到符合我要求的答案; 这可能是因为不可能实现我想要的.
我有一个局部视图,它从视图模型中提取了一个IEnumerable的EditorFor字段列表:
@model DocumentViewModelContainer
@Html.EditorFor(m => m.Document.Metadata)
Run Code Online (Sandbox Code Playgroud)
DocumentViewModelContainer具有以下代码:
public class DocumentViewModelContainer
{
public DocumentViewModel Document
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
DocumentViewModel具有以下代码:
public class DocumentViewModel
{
public IEnumerable<DocumentMetadataFieldViewModel> Metadata
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
在这两个视图模型中都有大量其他对象,我在这个问题中忽略了这些对象.DocumentMetadataFieldViewModel由几个标准类型的字段组成(int,字符串等)
我想要实现的是通过底层视图模型中的对象排序将OrderBy添加到此列表中,如下所示:
@model DocumentViewModelContainer
@Html.EditorFor(m => m.Document.Metadata.OrderBy(i => i.InstanceFieldOrder))
Run Code Online (Sandbox Code Playgroud)
但是这会给出错误:
System.InvalidOperationException : Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Run Code Online (Sandbox Code Playgroud)
我不仅对MVC很新,而且对C#来说也是如此; 这个项目让我在飞行中学习语言,所以请玩好:)
谢谢,
标记