Привязка данных ядра Blazor в ASP.Net нарушена - PullRequest
0 голосов
/ 27 июня 2019

Каким-то образом за последние 2 дня моя привязка данных к модели нарушилась на моих страницах, используемых для «добавления новых» и «обновления» записей базы данных. У меня есть код ниже - я свернул его для просмотра.

@page "/NewRepairOrder"
@using ShopLiveWebVersion2._0.Models
@using ShopLiveWebVersion2._0.DataAccess
@using ShopLiveWebVersion2._0.Services
@using ShopLiveWebVersion2._0.Data
@inject IUriHelper UriHelper
@inject RepairOrderContext context

    <div class="container">
        @if (RO == null)
        {
            <div class="row">
                <div class="col-lg-6 float-right">
                    <h2>Loading....</h2>
                </div>
            </div>
        }
        else
        {
            <div class="row">
                <div class="col-lg-1"></div>
                <div class="col-lg-10">
                    <h2>Add New Repair Order</h2>
                    <h4>@ErrorMessage</h4>
                </div>
            </div>

            <div class="row">
                <div class="col-lg-1"></div>
                <div class="col-lg-2">
                    <label for="ControlNumber" class="Control-label">Repair Order #:"</label>
                    <input for="ControlNumber" class="form-control" bind="@RO.ControlNumber" maxlength="15" required />
                </div>

HTML-код страницы продолжает включать другие поля ввода и выбора. Ниже приведен весь блок функций.

@functions
{
    private OptionsDataAccess OpsData;
    private RepairOrderDataAccess ROData;

    private List<LocationOptions> LocationOps;
    private List<EmployeeOptions> EmployeeOps;
    private List<StatusOptions> StatusOps;

    private RepairOrder RO = new RepairOrder();
    private string ErrorMessage;


    protected override async Task OnInitAsync()
    {
        LocationOps = new List<LocationOptions>();
        EmployeeOps = new List<EmployeeOptions>();
        StatusOps = new List<StatusOptions>();

        OpsData = new OptionsDataAccess(context);
        ROData = new RepairOrderDataAccess(context);

        LocationOps = await Task.Run(() => OpsData.GetAllLocationOptions());
        EmployeeOps = await Task.Run(() => OpsData.GetAllEmployeeOptions());
        StatusOps = await Task.Run(() => OpsData.GetAllStatusOptions());

    }

    private void SaveRepairOrder()
    {

        try
        {
            ROData.AddRepairOrder(RO);
            //UriHelper.NavigateTo("/Home");
        }
        catch
        {
            ErrorMessage = "Could not Save the Data -- try again";
        }

    }
}

У меня изначально было "RO = new RepairOrder ();" в методе InitAsync (), когда объявление было снаружи. Бросая слюну, я включил его как один вкладыш вне метода.

Когда я нажимаю кнопку сохранения, RO со всеми значениями NULL сохраняется в базе данных.

Я добавил элементы метки внизу страницы, привязанные к тем же данным, что и входные данные, и выберите, чтобы увидеть эффект перед закрытием страницы, и они также показывают NULL.

Я также попытался создать отдельные строковые элементы для каждого, а затем непосредственно перед отправкой RO в базу данных выполнить "RO. = {Item};".

Кто-нибудь видел, чтобы привязка была отключена таким образом?

1 Ответ

0 голосов
/ 29 июня 2019

Простой ответ на этот вопрос - убедиться, что вы прочитали изменения, которые вы обновляете.В новейшем обновлении внесены важные изменения.Я получил привязку к данным.

Мне пришлось изменить весь мой код с:

<div class="col-lg-2">
      <label for="ControlNumber" class="Control-label">Repair Order #:"</label>
      <input for="ControlNumber" class="form-control" bind="@RO.ControlNumber" maxlength="15" required />
</div>

на новый способ привязки данных:

<div class="col-lg-2">
      <label for="ControlNumber" class="Control-label">Repair Order #:"</label>
      <input for="ControlNumber" class="form-control" @bind="RO.ControlNumber" maxlength="15" required />
</div>

Для привязки элементов к методу в ваших «функциях» или «коде» (который теперь вызывается) вы используете немного другой формат.

<button class="btn" @onclick="@DoSomthing">Click Me</button>

Я отмечу, что привязка данных нового стиля уничтожила мой смысл в пределахобъект.intellisense будет показывать имя объекта, но после того, как вы нажмете «ввод» или выберете объект, ни один из внутренних элементов не появится в intellisense.

Самый большой урок, который я переучил сегодня - ВСЕГДА ПРОЧИТАЙТЕ ИЗМЕНИТЬ ДОКУМЕНТЫ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...