Od 15. do 21.4. slevy 20 až 80% v sekci C/C++. Když ne teď, tak kdy?
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde

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

Aktivity (4)
Avatar
Petra D.
Člen
Avatar
Petra D. :3. března 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>

</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'
}
}
];
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. března 21:37
Jaký si to uděláš, takový to máš...
Avatar
Odpovídá na Petra D.
Michal Štěpánek:4. března 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. března 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. března 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. března 8:10
Jaký si to uděláš, takový to máš...
Avatar
Ilja Židkov
Člen
Avatar
Odpovídá na Petra D.
Ilja Židkov:4. března 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. března 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.