【发布时间】:2016-05-26 11:12:00
【问题描述】:
我有这个 XML:
<Preferences>
<Section Name="PREF_SECTION_NAME_1">
<Preference Name="PREF_NOTIFY_1" Type="radio">
<Options>
<Option Name="PREF_OPT_YES" Value="true"/>
<Option Name="PREF_OPT_NO" Value="false"/>
</Options>
<Default>true</Default>
</Preference>
</Section>
</Preferences>
我将其序列化为模型并传递给我的视图:
我的观点的一部分
case "radio":
<b>@Html.Label(Model.Section[i].PreferenceModel[j].Name)</b>
for (var r = 0; r != Model.Section[i].PreferenceModel[j].Options.Count(); r++)
{
if (Model.Section[i].PreferenceModel[j].Default == Model.Section[i].PreferenceModel[j].Options[r].Value)
{
@Html.RadioButtonFor(m => m.Section[i].PreferenceModel[j].Name, Model.Section[i].PreferenceModel[j].Options[r].Value, new { @checked = true })
}
else
{
@Html.RadioButtonFor(m => m.Section[i].PreferenceModel[j].Name, Model.Section[i].PreferenceModel[j].Options[r].Value)
}
}
我(作为用户)选择了第二个单选按钮(假)。
然后我在提交按钮上调用我的 Controller 方法并获得这些值:
我需要“默认”来反映用户的选择,在这种情况下应该是“假”。
我已经尝试了所有我能想到的组合,但它仍然总是“空”。
抱歉,我遗漏了一些代码:
@Html.HiddenFor(m => m.Section[i].PreferenceModel[j].Name, "Default")
呈现的 HTML:
<h1><label for="PREF_SECTION_NAME_1">PREF_SECTION_NAME_1</label></h1>
<div class="clear"></div>
<input length="4" id="Section_0__PreferenceModel_0__Type" name="Section[0].PreferenceModel[0].Type" type="hidden" value="radio">
<input length="4" id="Section_0__PreferenceModel_0__Name" name="Section[0].PreferenceModel[0].Name" type="hidden" value="PREF_NOTIFY_1">
<b><label for="PREF_NOTIFY_1">PREF_NOTIFY_1</label></b>
<input checked="True" id="Section_0__PreferenceModel_0__Name" name="Section[0].PreferenceModel[0].Name" type="radio" value="true">
<input id="Section_0__PreferenceModel_0__Name" name="Section[0].PreferenceModel[0].Name" type="radio" value="false">
<input length="7" id="Section_0__PreferenceModel_0__Name" name="Section[0].PreferenceModel[0].Name" type="hidden" value="PREF_NOTIFY_1">
我的模特:
[XmlRoot("Preferences")]
public class PreferencesModel
{
/// <summary>
/// Message to display to user on UI
/// </summary>
[XmlIgnore]
public string MessageToUser { get; set; }
/// <summary>
/// Stores Preferences
/// </summary>
[XmlElement(ElementName = "Section")]
public List<Section> Section { get; set; }
}
public class Section
{
/// <summary>
/// Name of Section (for Grouping Purposes)
/// </summary>
[XmlAttribute("Name")]
public string Name { get; set; }
/// <summary>
/// List of Preferences for this section
/// </summary>
[XmlElement("Preference")]
public List<PreferenceModel> PreferenceModel { get; set; }
}
public class PreferenceModel
{
/// <summary>
/// Type of HTML Control ie radio button, textbox
/// </summary>
[XmlAttribute("Type")]
public string Type { get; set; }
/// <summary>
/// Name of Preference
/// </summary>
[XmlAttribute("Name")]
public string Name { get; set; }
/// <summary>
///
/// </summary>
//[XmlAttribute("Default")]
[XmlElement("DefaultValue")]
public string DefaultValue { get; set; }
[XmlIgnore]
public bool CheckBoxValue
{
get
{
bool flag;
if (Boolean.TryParse(DefaultValue, out flag))
{
return flag;
}
else
{
return false;
}
}
set
{
DefaultValue = value.ToString();
}
}
/// <summary>
///
/// </summary>
[XmlElement("Options")]
public List<Option> Options { get; set; }
}
[XmlType("Option")]
public class Option
{
/// <summary>
///
/// </summary>
[XmlAttribute("Name")]
public string Name { get; set; }
/// <summary>
///
/// </summary>
[XmlAttribute("Value")]
public string Value { get; set; }
}
【问题讨论】:
-
你把 html.hiddenfor 表达式放在表单里面了吗?
-
@StianStandahl 是的。当然。谢谢
-
您有生成的 html 示例吗?
-
@StianStandahl 给我 1 分钟 :)
-
Html.HiddenFor()的第二个参数是htmlAttributes,即 typeofobject- 您只使用了string。string只有一个名为Length的属性,在您的情况下有 7 个字符,因此它生成了length="7"
标签: c# asp.net-mvc