Можно ли пройти процесс привязки базовой модели asp net, и если да, то как?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли пройти процесс привязки базовой модели asp net, и если да, то как?

Сообщение Anonymous »

Иногда при отправке данных на сервер для OnPost происходит сбой привязки, и все свойства объекта имеют значения по умолчанию. Я нахожу отладку этой проблемы очень утомительной, и было бы полезно, если бы я мог установить где-нибудь точку останова и пройти через процесс привязки, чтобы увидеть, что его сбивает.
Иногда решение проблемы привязки оставляет меня в таком же замешательстве.
Например, вот моя функция OnPost:

Код: Выделить всё

    public async Task OnPostSaveFXRateAsync(Fxrates fxRate)
{
fxRate.LastUpdatedBy = User.Identity.Name;

bool isSuccess = await AL.SaveAndLogEntityAsync(fxRate, Constants.Audit_Module_ControlCenter, User.Identity.Name);

return new JsonResult(new { success = isSuccess });
}
Это вызов ajax:

Код: Выделить всё

onClickSave = (e) =>
{
let fxDate = $('#FXRate_Fxdate').data('kendoDatePicker').value();

let formData =
{
Id: parseInt($('#FXRate_Id').val()),
Fxdate: fxDate?.toYYYYMMDD(),
FiscalPeriodTypeId: $('#FXRate_FiscalPeriodTypeId').val(),
FromCurrencyId: $('#FXRate_FromCurrencyId').val(),
ToCurrencyId: $('#FXRate_ToCurrencyId').val(),
Fxrate: parseFloat($('#FXRate_Fxrate').val())
};

console.log(formData);

let validator = $('#frmFXRate').kendoValidator().data('kendoValidator');
console.log(validator);

if (validator.validate())
{
$.ajax({
type: 'POST',
url: '/Admin/ControlCenter/FXRateDetails?handler=SaveFXRate',
data: formData,
content: 'application/json; charset=utf-8',
headers: { 'RequestVerificationToken': $("input[name='__RequestVerificationToken']").val() },
success: function (response)
{
console.log('save successful');
window.parent.$('#FXRatesGrid').data('kendoGrid').dataSource.read();
window.parent.$("#DetailsWnd").data("kendoWindow").close();
},
error: function (xhr, textStatus, errorThrown)
{
console.log('Save failed');
}
});
}
else
{
console.log('Form data invalid');
}
}
У меня есть ajax-вызовы, которые выглядят точно так же в дюжине других мест, и все они работают нормально, но здесь происходит сбой привязки модели. Я проверил, что все имена и типы полей совпадают.
Исправление, благодаря которому привязка работала, заключалось в том, чтобы обернуть отдельные поля formData в объект с тем же именем, что и параметр OnPost. вот так:

Код: Выделить всё

    let formData =
{
fxRate: {
Id: parseInt($('#FXRate_Id').val()),
Fxdate: fxDate?.toYYYYMMDD(),
FiscalPeriodTypeId: $('#FXRate_FiscalPeriodTypeId').val(),
FromCurrencyId: $('#FXRate_FromCurrencyId').val(),
ToCurrencyId: $('#FXRate_ToCurrencyId').val(),
Fxrate: parseFloat($('#FXRate_Fxrate').val())
}
};
Если бы мне пришлось делать это везде, тогда ладно, именно так и работает привязка. Но я не понимаю, почему мне пришлось сделать это здесь и только здесь. Что такого особенного в этом случае?
Для завершения, вот класс Fxrates (класс структуры сущности):
публичный частичный класс Fxrates
{
public int Id { get; набор;

Код: Выделить всё

public DateTime Fxdate { get; set; }

public string FiscalPeriodTypeId { get; set; }

public string FromCurrencyId { get; set; }

public string ToCurrencyId { get; set; }

public decimal Fxrate { get; set; }

public DateTime CreatedDate { get; set; }

public DateTime LastUpdatedDate { get; set; }

public string LastUpdatedBy { get; set; }

public virtual FiscalPeriodType FiscalPeriodType { get; set; }

public virtual Currency FromCurrency { get; set; }

public virtual User LastUpdatedByNavigation { get; set; }

public virtual Currency ToCurrency { get; set; }
Если бы я мог выполнить процесс привязки, возможно, я бы лучше понял, почему конкретные экземпляры, такие как этот, терпят неудачу, в то время как другие этого не делают.

Подробнее здесь: https://stackoverflow.com/questions/785 ... nd-if-so-h
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»