1

のリストで EditorFor を使用していますComponentParameter(以下を参照)。値に基づいてエディター テンプレートが切り替わり、datetime が機能しません。ポストバック前の HTML を見ると、値はありますがList<ComponentParameter>、モデルの内部では、日時に対応するスポットが null になっています。

public class ComponentParameter
{
    public string Value { get; set; }
    public string Description { get; set; }
    public string Type { get; set; }
    public bool Optional { get; set; }
}

エディター テンプレート:

@switch (Model.Type.ToLowerInvariant())
{
case "datetime":
        Html.RenderPartial("ParameterHeader", Model); 
<div class="grid_4">
    @{
        DateTime value;
        if (!DateTime.TryParse(Model.Value, out value))
        {
            value = DateTime.Today + TimeSpan.FromHours(6);
        }
    }
    // Commenting out the next 2 lines causes the value to post back
    <div class="grid_9">@Html.TextBox("", value.ToString("MM/d/yyyy"), new { @class = "date-picker autotooltip " + Model.RequiredClass, @data_mwtooltip = Model.Description })</div>
    @Html.TextBox("", value.ToString("hh:mm tt"), new {@class="time-picker"})
    @Html.HiddenFor(x => x.Value, new { @class = "input-time-picker" })
    @Html.HiddenFor(x => x.Optional)
    @Html.HiddenFor(x => x.Description)
    @Html.HiddenFor(x => x.Type)
</div>
        break;
case "string":
    <div class="grid_12">
        @{ Html.RenderPartial("ParameterHeader", @Model); }
@Html.TextBoxFor(x => x.Value, new { @class = "autotooltip " + Model.RequiredClass, @data_mwtooltip = Model.Description })
@Html.HiddenFor(x => x.Optional)
@Html.HiddenFor(x => x.Description)
@Html.HiddenFor(x => x.Type)
    </div>
        break;
}

HTML:

<div class="grid_4">
<div class="grid_9">
<span class="ui-spinner ui-widget ui-widget-content ui-corner-all">
<input id="ComponentList_0__ComponentParameterList_0_" class="time-picker ui-spinner-input valid" type="text" value="06:00 AM" name="ComponentList[0].ComponentParameterList[0]" aria-valuenow="1357041600000" autocomplete="off" role="spinbutton">
<a class="ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default ui-button-text-only" tabindex="-1" role="button" aria-disabled="false">
<a class="ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default ui-button-text-only" tabindex="-1" role="button" aria-disabled="false">
</span>
<input id="ComponentList_0__ComponentParameterList_0__Value" class="input-time-picker" type="hidden" value="07/11/2013 06:00 AM" name="ComponentList[0].ComponentParameterList[0].Value">
<input id="ComponentList_0__ComponentParameterList_0__Optional" type="hidden" value="False" name="ComponentList[0].ComponentParameterList[0].Optional">
<input id="ComponentList_0__ComponentParameterList_0__Description" type="hidden" value="Start Time" name="ComponentList[0].ComponentParameterList[0].Description">
<input id="ComponentList_0__ComponentParameterList_0__Type" type="hidden" value="datetime" name="ComponentList[0].ComponentParameterList[0].Type">
</div>
<div class="grid_12">
<label>
<input id="ComponentList_0__ComponentParameterList_5__Value" class="autotooltip paramRequired required" type="text" value="" name="ComponentList[0].ComponentParameterList[5].Value" data-mwtooltip="Attention Line" title="">
<input id="ComponentList_0__ComponentParameterList_5__Optional" type="hidden" value="False" name="ComponentList[0].ComponentParameterList[5].Optional">
<input id="ComponentList_0__ComponentParameterList_5__Description" type="hidden" value="Attention Line" name="ComponentList[0].ComponentParameterList[5].Description">
<input id="ComponentList_0__ComponentParameterList_5__Type" type="hidden" value="string" name="ComponentList[0].ComponentParameterList[5].Type">
</div>
4

1 に答える 1

1

HTML をもう一度見てみると、問題は、Html ヘルパーがモデルにもバインドしようとしていたことid="ComponentList_0__ComponentParameterList_0_"です。これにより、エラーが原因で、そのモデルがまったくバインドされないように見えました。

入力フィールドをいくつか取得しようとしただけだったので、それらを削除して通常の HTML に置き換えました<input>

于 2013-07-11T17:00:13.307 に答える