IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: U nulového odkazu nelze provést vazbu za běhu.

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petra D.
Člen
Avatar
Petra D. :3.3.2019 21:37

Ahoj všem, jdu si pro radu...
Mám stránku na které využívám hodnoty z modelu, které se mi po kliknutí na tlačítko načtou do modalu. V něm je další tlačítko s dalším modalem ve kterém už hodnoty z modelu nepoužívám, zobrazují se pouze data vrácená ajaxem. Vyberu jeden řádek z vrácených dat aby se tento, druhý modal uzavřel, a načetl vybraná data do prvního modalu. Všechno tohle proběhne, data se mi v pořádku načtou tak jak by mělo, ale současně mi vyskočí chyba 'U nulového odkazu nelze provést vazbu za běhu.' Tuším, že se mi někde cestou ztratí data z původního modelu ale nevím proč, stránka se nikde nerefreshne data se všude zobrazují dále správně, na původní stránce i v původním prvním modalu, stejně tak se správně načtou nová data...
Jak se tohle dá vyřešit, nebo obejít...? Už do touho koukám několikátej den a nic nepomáhá...
Díky za každý nápad...

@using (Html.BeginFor­m("Edit", "AdminProduct", FormMethod.Post))
{
<section class="container-fluid">
<div class="row">
<h2><span data-feather="star"><­/span> Detail Produktu</h2><br />
</div>
<dl class="row mt-2">
<dt class="col-xl-3 col-md-3 col-sm-3">kód</dt>
<dd class="col-xl-3 col-md-4 col-sm-4">@Model.Code</dd>
<dt class="col-xl-3 col-md-3 col-sm-3">Segment</dt>
<dd class="col-xl-3 col-md-4 col-sm-4">@Model.Seg­ment</dd>
<dt class="col-xl-3 col-md-3 col-sm-3">Název</dt>
<dd class="col-xl-3 col-md-4 col-sm-4">@Model.Name</dd>
</dl>
<div class="row">
<div class="col-9 col-sm-9 text-right" style="bottom:15px;">
<button type="button" class="btn btn-primary" onclick="Upda­teProductDeta­il()">Upravit</but­ton>
</div>
</div>
<div class="modal fade" id="modalEdit­Product" tabindex="-1" role="dialog" aria-labelledby="e­xampleModalCen­terTitle" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered " role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleMo­dalLongTitle">Ú­prava produktu</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="form-group row">
<label for="Segment" class="col-sm-2 col-form-label">Segmen­t</label>
<div class="col-sm-4">
<textarea class="form-control" id="Segment" rows="2" cols="4">@Model­.Segment</tex­tarea>
</div>
<label for="Name" class="col-sm-2 col-form-label">Název</la­bel>
<div class="col-sm-4">
<textarea class="form-control" id="Name" rows="2" cols="4">@Model­.Name</textare­a>
</div>
</div>
<div class="modal-footer">
<div class="col-8 text-right">
<button type="button" class="btn" onclick="GetVa­lues()">Kopíro­vat</button>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modalGetValues" tabindex="-1" role="dialog" aria-labelledby="#e­xampleModalCen­terTitle" aria-hidden="true">
<div class="modal-dialog modal-lg vertical-align-center" role="document">
<div class="modal-content " style="width: 810px; ">
<div class="modal-header">
<h5 class="modal-title" id="exampleMo­dalLongTitle">Vy­brat produkt ke zkopírování</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body modal-body-long">
<div class="form-group">
<div class="col-sm-12">
<table id="grid-data-product" class="table table-sm table-hover" style="width:100%;">
<thead>
<tr>
<th>ID</th>
<th>Název</th>
<th></th>
</tr>
</thead>
</table>
</div>
</div>
</div>
<div class="modal-footer">
<div class="col-12">
<button type="button" class="btn" data-dismiss="modal">Zav­řít</button>
</div>
</div>
</div>
</div>
</div>
</section>
<script>
function GetValues() {
$("#modalGetVa­lues").modal('show');
var columndef = [
{ "data": "ID" },
{ "data": "Name" },
{
'data': "ID",
'render': function (ID) {
return '<button id="' + ID + '" onclick="Load­Values(this.id)" class="btn-sm btn-primary">Kopí­rovat</a>'
}
}
];
var defaultsort = [[1, "asc"]];
var primarykeycolumn = 'ID';
table = $('#grid-data-product').Data­Table({
pageLength: 10,
language: {
"url": "//cdn.datata­bles.net/plug-ins/1.10.16/i18n/Cze­ch.json"
},
ajax: {
url: '/api/admin/Get­Dialog',
dataSrc: 'data',
xhrFields: {
withCredentials: true
}
},
columns: columndef,
order: defaultsort,
processing: true,
serverSide: true,
ordering: true,
select: true,
destroy: true,
searching: true,
paging: true,
pageLength: @Model.GridSize,
rowId: primarykeycolumn,
select: {
style: 'multi',
selector: 'td:first-child'
},
fixedHeader: {
header: true,
headerOffset: 82
}
});
}
function LoadValues(id) {
$.ajax({
dataType: "json",
method: 'GET',
url: '/api/admin/Get­ValuesFromPro­duct/' + id,
xhrFields: {
withCredentials: true
}
})
.done(function (data) {
$("#modalGetVa­lues").modal('hi­de');
$("#Segment")­.val(data.Seg­ment);
});
}
</script>
}

Zkusil jsem: Zkoušela jsem udělat cache původního obsahu stránky i jsem zkoušela to celé překopat, otevřít z první stránky jen jeden modal ze kterého se v databázi rovnou překopírují data a celá stránka se refreshne s načtením nových dat do modalu ale toho se mi vůbec nepodařilo dosáhnout protože už při volání procedury pro kopírování mi vyskakovala tahle samá chyba...
Tuší někdo co s tím?

Odpovědět
3.3.2019 21:37
Jaký si to uděláš, takový to máš...
Avatar
Odpovídá na Petra D.
Michal Štěpánek:4.3.2019 7:59

V první řadě používej pro vkládání kódu tlačítko "</>", protože takthle je to hrozně nepřehledné a v druhé řadě se zaměř na to, abys zjistila, která data se ti to vlastně "ztratí", pak bude jednodušší zjistit proč...

Nahoru Odpovědět
4.3.2019 7:59
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petra D.
Člen
Avatar
Petra D. :4.3.2019 8:10

Dobře, tak znovu... Ztratí se mi data z původního obsahu stránky, tedy z této části, u té se mi zobrazuje ta chyba:
<dt class="col-xl-3 col-md-3 col-sm-3">kód</dt>
<dd class="col-xl-3 col-md-4 col-sm-4">@Model.Code</dd>
<dt class="col-xl-3 col-md-3 col-sm-3">Segment</dt>
<dd class="col-xl-3 col-md-4 col-sm-4">@Model.Seg­ment</dd>
<dt class="col-xl-3 col-md-3 col-sm-3">Název</dt>
<dd class="col-xl-3 col-md-4 col-sm-4">@Model.Name</dd>
tím se ztratí i z prvního modalu... i když se všude dál zobrazují... ve VS se to tváří že @Model je null, ale netuším proč...?
Znovu celý kód

@using (Html.BeginForm("Edit", "AdminProduct", FormMethod.Post))
{
    <section class="container-fluid">
        <div class="row">
            <h2><span data-feather="star"></span> Detail Produktu</h2><br />
        </div>
        <dl class="row mt-2">
            <dt class="col-xl-3 col-md-3 col-sm-3">kód</dt>
            <dd class="col-xl-3 col-md-4 col-sm-4">@Model.Code</dd>
            <dt class="col-xl-3 col-md-3 col-sm-3">Segment</dt>
            <dd class="col-xl-3 col-md-4 col-sm-4">@Model.Segment</dd>
            <dt class="col-xl-3 col-md-3 col-sm-3">Název</dt>
            <dd class="col-xl-3 col-md-4 col-sm-4">@Model.Name</dd>
        </dl>
        <div class="row">
            <div class="col-9 col-sm-9 text-right" style="bottom:15px;">
                                <button type="button" class="btn btn-primary" onclick="UpdateProductDetail()">Upravit</button>
            </div>
        </div>
        <div class="modal fade" id="modalEditProduct" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
            <div class="modal-dialog modal-lg modal-dialog-centered " role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="exampleModalLongTitle">Úprava produktu</h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <div class="form-group row">
                            <label for="Segment" class="col-sm-2 col-form-label">Segment</label>
                            <div class="col-sm-4">
                                <textarea class="form-control" id="Segment" rows="2" cols="4">@Model.Segment</textarea>
                            </div>
                            <label for="Name" class="col-sm-2 col-form-label">Název</label>
                            <div class="col-sm-4">
                                <textarea class="form-control" id="Name" rows="2" cols="4">@Model.Name</textarea>
                            </div>
                    </div>
                    <div class="modal-footer">
                        <div class="col-8 text-right">
                            <button type="button" class="btn" onclick="GetValues()">Kopírovat</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="modal fade" id="modalGetValues" tabindex="-1" role="dialog" aria-labelledby="#exampleModalCenterTitle" aria-hidden="true">
            <div class="modal-dialog modal-lg vertical-align-center" role="document">
                <div class="modal-content " style="width: 810px; ">
                    <div class="modal-header">
                        <h5 class="modal-title" id="exampleModalLongTitle">Vybrat produkt ke zkopírování</h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body modal-body-long">
                        <div class="form-group">
                            <div class="col-sm-12">
                                <table id="grid-data-product" class="table table-sm table-hover" style="width:100%;">
                                    <thead>
                                        <tr>
                                            <th>ID</th>
                                            <th>Název</th>
                                            <th></th>
                                        </tr>
                                    </thead>
                                </table>
                            </div>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <div class="col-12">
                            <button type="button" class="btn" data-dismiss="modal">Zavřít</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <script>
        function GetValues() {
            $("#modalGetValues").modal('show');
        var columndef = [
            { "data": "ID" },
            { "data": "Name" },
            {
                'data': "ID",
                'render': function (ID) {
                    return '<button id="' + ID + '" onclick="LoadValues(this.id)" class="btn-sm btn-primary">Kopírovat</a>'
                }
            }
            ];
            var defaultsort = [[1, "asc"]];
            var primarykeycolumn = 'ID';
        table = $('#grid-data-product').DataTable({
            pageLength: 10,
            language: {
                "url": "//cdn.datatables.net/plug-ins/1.10.16/i18n/Czech.json"
            },
            ajax: {
                url: '/api/admin/GetDialog',
                dataSrc: 'data',
                xhrFields: {
                    withCredentials: true
                }
            },
            columns: columndef,
            order: defaultsort,
            processing: true,
            serverSide: true,
            ordering: true,
            select: true,
            destroy: true,
            searching: true,
            paging: true,
            pageLength: @Model.GridSize,
            rowId: primarykeycolumn,
            select: {
                style: 'multi',
                selector: 'td:first-child'
            },
            fixedHeader: {
                header: true,
                headerOffset: 82
            }
        });
        }
        function LoadValues(id) {
        $.ajax({
            dataType: "json",
            method: 'GET',
            url: '/api/admin/GetValuesFromProduct/' + id,
            xhrFields: {
                withCredentials: true
            }
        })
            .done(function (data) {
                $("#modalGetValues").modal('hide');
                $("#Segment").val(data.Segment);
            });
    }
    </script>
}
Nahoru Odpovědět
4.3.2019 8:10
Jaký si to uděláš, takový to máš...
Avatar
Ilja Židkov
Člen
Avatar
Odpovídá na Petra D.
Ilja Židkov:4.3.2019 12:59

U nulového odkazu nelze provést vazbu za běhu.

To je vlastně NullReference­Exception? Čili @Model je null.

Zkoušela jsem udělat cache původního obsahu...

Jako první bych "projel" Edit akci v AdminControlleru. Nastav breakpoint na předpis akce a sleduj, co ti to dělá s modelem po odeslání formuláře.

 
Nahoru Odpovědět
4.3.2019 12:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.