Member 14803832 Ответов: 2

Как отправить идентификатор контроллера собственность от текущего элемента в JSON в MVC?


Я новичок в json и хочу показать подробную информацию на основе идентификатора элемента, но я понятия не имею, как отправить controllerthis id prperty, может ли кто-нибудь помочь мне определить этот идентификатор?

Что я уже пробовал:

вот мой контроллер:
public JsonResult EventDetails(int id)
{
    Event e = null;
    using (EventsDBEntities db = new EventsDBEntities())
    {
        e = db.Events.Where(x => x.Id == id).FirstOrDefault();
    }
    return new JsonResult { Data = e, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}

ничего особенного, правда? а теперь мой взгляд:
<h2>Json Events</h2>
<h2>Add Event</h2>
<table>
<tbody>
<tr>
    <td>Title : </td>
    <td>Description : </td>
    <td>Location : </td>
    <td></td>
</tr>
</tbody>
</table>

<h2>Get Event</h2>
<table>
<tbody>
<tr>
    <td>Search :  </td>
</tr>
<tr>
    <td>
        <div id="UpdatePanel">
        </div>
    </td>
</tr>
</tbody>
</table>

<div id="dialog">
</div>

и мой javascript:
function loadData() {
    $.ajax({
        type: "GET",
        url: "/Home/JsonEvents",
        dataType: "JSON",
        success: function (result) {
            $.each(result, function (i, val) {
                var trow = $('<tr></tr>');
                trow.append('<td id=ident>' + val.Id + " " + '</td>');
                trow.append('<td>' + val.Title + " " + '</td>');
                trow.append('<td>' + val.Description + " " +'</td>');
                trow.append('<td>' + val.Location + " " +'</td>');
                trow.append('<td>' + '<a id=details onclick=details();>show</a>' +" "+'</td>');
                trow.append('<td>' + "edit" +" " + '</td>');
                trow.append('<td>' + "delete" + " " +'</td>');
                tab.append(trow);
            });
            $("tr:odd", tab).css('background-color', '#C4C4C4');
            $("#UpdatePanel").html(tab);
        },
        error: function () {
            alert("Failed! Please try again.");
        }
    });

    var tab = $('<table class=MyTable></table>');
    var thead = $('<thead></thead>');
    thead.append('<th>ID</th>');
    thead.append('<th>Event Title</th>');
    thead.append('<th>Description</th>');
    thead.append('<th>Location</th>');
    // now we will Append database data here
    tab.append(thead);
}

function details() {
    var id = $(this).attr("ident");    
    $.ajax({
        type: "GET",
        url: "/Home/EventDetails",
        data: { id: id },
        dataType: "JSON",
        success: function (data) {
            var trow = $('<tr></tr>');
            trow.append('<td>' + data.Id + " " + '</td>');
            trow.append('<td>' + data.Title + " " + '</td>');
            trow.append('<td>' + data.Description + " " + '</td>');
            trow.append('<td>' + data.Location + " " + '</td>');
            trow.append('<td>' + "edit" + " " + '</td>');
            trow.append('<td>' + "delete" + " " + '</td>');
            tab.append(trow);
  
            $("#dialog").html(tab);
        },
        error: function () {
            alert("Failed! Please try again.");
        }
    });

    var tab = $('<table class=MyTable></table>');
    var thead = $('<thead></thead>');
    thead.append('<th>ID</th>');
    thead.append('<th>Event Title</th>');
    thead.append('<th>Description</th>');
    thead.append('<th>Location</th>');
    // now we will Append database data here
    tab.append(thead);
}

может ли кто-нибудь сказать мне, как я могу идентифицировать это "удостоверение личности"?

2 Ответов

Рейтинг:
12

MadMyche

Посмотрите на вашу таблицу-население-процедуры... они генерируют а <tr></tr> что недопустимо, так как s TR не может быть пустым, а затем a <TD></TD> для ячеек, но они не находятся ни в каких строках, поэтому они не появятся. Похожая история и с самим THEAD что я только взглянул.

Возможно, вы захотите использовать отладчик в браузере (щелкните правой кнопкой мыши на странице и выберите проверить), чтобы узнать, работает ли ваш AJAX, а также узнать, каков ответ, используя вкладку Сеть


Рейтинг:
0

Richard Deeming

Начните с хранения идентификатора таким образом, чтобы вы могли его извлечь:

var trow = $('<tr/>').data("id", val.Id);
trow.append('<td>' + val.Id + " " + '</td>');
trow.append('<td>' + val.Title + " " + '</td>');
trow.append('<td>' + val.Description + " " +'</td>');
trow.append('<td>' + val.Location + " " +'</td>');
trow.append('<td>' + '<a href="#" rel="event-details">show</a>' +" "+'</td>');
trow.append('<td>' + "edit" +" " + '</td>');
trow.append('<td>' + "delete" + " " +'</td>');
tab.append(trow);
Затем присоедините обработчик событий через код и извлеките идентификатор из строки:
tab.on("click", "a[rel='event-details']", function(e){
    var tr = $(this).closest("tr");
    var id = tr.data("id");
    $.ajax({ ... });
});


Member 14803832

Он работает идеально! Большое вам спасибо, я действительно был без ума от этого... Спасибо!

Member 14803832

Но не могли бы вы сказать мне, почему он был неопределенным, а теперь это нормально?

Richard Deeming

Когда была вызвана ваша функция, this разве элемент с атрибутом не называется ident.

Вместо этого у вас был элемент с идентификатором ident в другом месте строки, с текстом этого элемента, установленным на идентификатор события, который вы пытались найти.

Это все равно не сработает, потому что идентификаторы элементов должны быть уникальными в HTML-документе. Вы бы в конечном итоге получили дубликат идентификатора элемента для каждой строки в вашей таблице.

Member 14803832

хорошо, я думаю, что начинаю понимать это, это был не атрибут, а объект, верно? о, мне еще многому надо научиться ))))