2015-10-15 3 views
0

Я работаю над исправлением ошибки в приложении, разработанном с помощью ASP.NET MVC Razor and Angular.ASP MVC DateTime Validation Issue в IE9

Проблема в том, что в IE9 значение datetime не отображается вообще в поле ввода.

Я отследил его до «обязательного», чтобы он продолжал добавлять required = «required».

Свойство IncidentDate в модели равно NULL-времени.

public System.DateTime ? IncidentDate { get; set; } 

Он отлично работает в IE10 +, FF и Chrome, но в IE 9 DateTime не отображается вообще.

Если я отредактировал HTML-код разметки и удалил требуемый тег, чем значение DateTime, появится в поле ввода.

Я попытался добавить следующую строку в Application_Start еще тот же вопрос:

ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelValidatorProvider()); 

Вот разметки, который генерируется в IE

<input name="Incident.IncidentDate" class="form-control ng-valid ng-isolate-scope input-validation-error ng-touched ng-dirty ng-valid-parse" id="Incident_IncidentDate" aria-invalid="true" aria-required="true" aria-describedby="Incident_IncidentDate-error" type="text" placeholder="dd/mm/yyyy h:mm am/pm" value="22/09/2015 2:00:00 PM" ng-model="model.Incident.IncidentDate" use-datepicker="true" format="DD/MM/YYYY hh:mm a" date-time-picker="" data-val-required="The Date and time of incident field is required." data-val="true" use-timepicker="true" data-val-daterange-min="1753-01-01T00:00:00" data-val-daterange-max="9999-12-31T23:59:59" data-val-daterange="The field Date and time of incident is invalid."> 

Если у кого есть решение этой проблемы, пожалуйста, дайте мне знать, , Спасибо.

Копаем бит глубже Я обнаружил, что существует специальный шаблон редактора даты и времени. Я начал ее отладки и, кажется, когда я не добавлять атрибуты он отлично работает в IE 9

DateTime? value = null; 
if (ViewData.Model != null) 
{ 
    value = ViewData.Model as DateTime?; 
} 

bool? datePicker = ViewData["datePicker"] as Nullable<bool> ?? true; 
bool? timePicker = ViewData["timePicker"] as Nullable<bool> ?? false; 
bool? showFormat = ViewData["showFormat"] as Nullable<bool> ?? true; 

bool? small = ViewData["small"] as Nullable<bool> ?? false; 
string groupClass = small.Value ? "input-group input-group-sm" : "input-group"; 

IDictionary<string, object> htmlAttributes = ViewData["htmlAttributes"] == null ? new Dictionary<string, object>() : ViewData["htmlAttributes"].ToDictionary(); 

string inputName = htmlAttributes.ContainsKey("Name") ? htmlAttributes["Name"].ToString() : Html.NameForModel().ToString(); 
string ngModel; 
if (!htmlAttributes.ContainsKey("ng-model")) 
{ 
    ngModel = "model." + inputName; 
    htmlAttributes.Set("ng-model", ngModel); 
} 
else 
{ 
    ngModel = htmlAttributes["ng-model"] as string; 
} 
htmlAttributes.Set("Name", inputName); 
htmlAttributes.Set("id", Html.IdForModel()); 
htmlAttributes.Set("class", "form-control"); 
//htmlAttributes.Set("ng-init", ngModel + " = ((" + ngModel + " == '0001-01-01T00:00:00' || " + ngModel +" == '1/01/0001 12:00:00 AM') ? '' : " + ngModel + ")"); // HACK: Make DateTime.MinValue display as empty 

htmlAttributes.Set("date-time-picker", string.Empty); 

const string DATE_FORMAT = "DD/MM/YYYY"; 
const string DATE_FORMAT_HINT = "dd/mm/yyyy"; 
const string TIME_FORMAT = "hh:mm a"; 
const string TIME_FORMAT_HINT = "h:mm am/pm"; 

string dateTimeFormatHint; 
string dateTimeFormat; 
if (datePicker == true && timePicker == false) 
{ 
    //dateTimeFormat = "d/m/Y"; // xdan 
    dateTimeFormat = DATE_FORMAT; 
    dateTimeFormatHint = DATE_FORMAT_HINT; 
    htmlAttributes.Set("default-time", "00:00:00"); // Set default time to start of the day 
} 
else if (datePicker == false && timePicker == true) 
{ 
    //dateTimeFormat = "g:i a"; // xdan 
    dateTimeFormat = TIME_FORMAT; 
    dateTimeFormatHint = TIME_FORMAT_HINT; 
} 
else 
{ 
    dateTimeFormat = "d/m/Y g:i a"; // xdan 
    // dateTimeFormat = DATE_FORMAT + " " + TIME_FORMAT; 
    dateTimeFormatHint = DATE_FORMAT_HINT + " " + TIME_FORMAT_HINT; 
} 
htmlAttributes.Set("format", dateTimeFormat); 
//htmlAttributes.Set("placeholder", dateTimeFormatHint); 


if (datePicker == true) 
{ 
    htmlAttributes.Set("use-datepicker", "true", true); 
} 
if (timePicker == true) 
{ 
    htmlAttributes.Set("use-timepicker", "true", true); 
} 
} 
<div class="datepicker"> 
@Html.TextBoxFor(m => m, htmlAttributes) 
</div> 
@if (showFormat == true) 
{ 
<div class="help-block small">eg: @dateTimeFormatHint</div> 
} 

Я думаю, что проблема с TIMEFORMAT, но я не знаю, как это исправить. Потому что, если я закомментируйте следующую строку из

htmlAttributes.Set("format", dateTimeFormat); 

значение даты отображается как в IE9 и IE 10, но это приносит еще одну проблему как дата получает отображается как:

2015-09-22T14: 00 : 00 + 10: 00

Fix

Установка формата в шаблоне редактора для DD/MM/YYYY h: mm a

Спасибо всем за ваши предложения.

+0

Вы используете любой плагин datepicker? –

+0

@pankaj да Я могу видеть ссылку на http://xdsoft.net/jqplugins/datetimepicker/ plugin – snowflakes74

+1

Какую версию углового js вы используете?потому что вот ссылка о совместимости https://docs.angularjs.org/guide/ie. Вот еще одна ссылка о проблеме, с которой вы столкнулись http://stackoverflow.com/questions/26567729/angular-js-not-working-with-ie9-but-works-with-other-browsers – Rocky

ответ

0

Какую версию углового js вы используете? потому что вот ссылка о совместимости https://docs.angularjs.org/guide/ie.

Вот еще одна ссылка о проблеме вы были лицом Angular JS not working with IE9 but works with other browsers

+0

Примите ответ :) – Rocky

+0

спасибо за ваши предложения, но в моем приложении он использует AngularJS v1.4.2. – snowflakes74

0

Я установил его, установив формат в шаблоне редактора для DD/MM/YYYY ч: мм в

Спасибо всем ваши предложения.