powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net+ xmlHttpRequest
18 сообщений из 18, страница 1 из 1
asp.net+ xmlHttpRequest
    #38719644
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

Есть представление которое выводит список задач и рядом с каждой задачей ссылки "изменить" и "удалить"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@model IEnumerable<TaskList.Models.Task>
<div id="tasks">
    @Html.Partial("_LoginPartial")
    <div class="layer2">
        @using (Html.BeginForm("NewTask", "Task"))
        {
 
            <input id="newTask" type="submit" value="Создать" />   
        }
        <div id="task">
            @foreach (var task in @Model)
            {           
                <div class="indent">
                    @task.Name
                    @Html.ActionLink("изменить", "EditTask", "Task", new { id = @task.Id }, null)
                    @Html.ActionLink("удалить", "DeleteTask", "Task", new { id = @task.Id }, new { @class = "link" })
                </div>  
            }
        </div>
    </div>
</div>


При клике на ссылку "удалить" должен посылаться асинхронный запрос удаления задачи на сервер.Страница должна просто перерисовать список задач,полностью не перезагружаясь.Для того чтобы это сделать повесил javascript который срабатывает при клике на ссылку:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
 $('.link').click(function (e) {
        e.preventDefault();
        var url = $(this).attr('href');
        SendData(url);
    });

    var xmlHttp = new XMLHttpRequest();
    function SendData(url) {
        xmlHttp = window.createAjax();
        if (xmlHttp) {
            try {
                xmlHttp.open("GET", url,true);
                xmlHttp.onreadystatechange = updPage;
                xmlHttp.send(null);
            } catch (e) {
                alert("Невозможно соединиться с сервером:\n" + e.toString() + "\n" + e.description);
            }
        } else { alert('xmlHttp undefined'); }	//  xmlHttp did not create
    }
    
    function createAjax() {
        var obj;
        try {
            obj = new XMLHttpRequest();
        } catch (e) {
            alert('e: ' + e.toString());
            try {
                obj = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e1) {
                alert('e1: ' + e1.toString());
                try {
                    obj = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e2) {
                    alert('e2: ' + e2.toString());
                    obj = false;
                }
            }
        }
        return obj;
    }
    function updPage() {
        var response = document.getElementById("tasks");
        if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200) {
                try { response.innerHTML= xmlHttp.responseText; }
                catch (e4) { alert("Ошибка доступа к содержимому страницы"); }
            }
            else if (xmlHttp.status == 404) { alert("Requested URL is not found."); }
            else if (window.request.status == 403) { alert("Access denied."); };
        }
    }


Проблема собственно в том что при первом клике по ссылке все работает как надо:скрипт выполняется,страница перерисовывается,задача удаляется.Но если второй раз кликнуть опять по любой из ссылок "удалить" скрипт уже не выполняется и происходит переход по ссылке,что мне не нужно.Как это исправить?
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38719666
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
$("#tasks").on("click", ".link", function(e) {
   e.preventDefault();
   var url = this.href;
   SendData(url);
});
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38719670
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, аякс лучше через jQuery делать, раз уж оно есть на странице.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38719674
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Мечкстати, аякс лучше через jQuery делать, раз уж оно есть на странице.+1

Делегирование и ajax средствами jQuery по научному
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38719798
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А через jquery как сделать тогда?
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38719803
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenixА через jquery как сделать тогда? http://api.jquery.com/category/ajax/
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38719809
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenixА через jquery как сделать тогда?
Код: javascript
1.
2.
3.
4.
$('#tasks').on('click', '.link', function(e) {
   e.preventDefault();
   $('#tasks').load(this.href);
});
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722244
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как сделать тоже самое, но чтобы передавалось не в виде html,а через json?
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722248
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenixА как сделать тоже самое, но чтобы передавалось не в виде html,а через json?А зачем? Вам же всё равно в итоге надо получить html.

Читайте документацию к методу jQuery.get() . Там и примеры есть.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722256
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,прохожу обучение,сказали сделать чтобы через json передавалось.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722262
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenix, ну тут всё просто ASP.NET MVC action должен отдавать JSON.
А в success callback метода jQuery.get() полученный JSON должен трансформироваться в HTML, ну или передаваться "классу", что инкапсулирует в себе рендеринг JSON в HTML.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722362
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,переделал свой контроллер под json.Не знаю правильно или нет.

public JsonResult DeleteTask(int id)
{
string view;
string parameter;
GetViewFromCookie(out view, out parameter);
data.HideTask(id);
return Json(View(view, new {parameter}), JsonRequestBehavior.AllowGet);
}
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722500
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenix, шнаяга. Model, или ViewModel надо отдавать в виде JSON, а не View.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722609
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,тогда возникает вопрос:передал модель через json дальше после события success вызывается функция в которой должно происходить обратное преобразование json-строки.Строка приходит примерно такого вида:[{"Id":55,"Name":"444t545","UserLogin":null,"Deadline":null,"Deleted":false,"TimeWhenTaskCompleted":null,"Marks":null},{"Id":56,"Name":"445t5454","UserLogin":null,"Deadline":null,"Deleted":false,"TimeWhenTaskCompleted":null,"Marks":null}]
А что с этим делать дальше понятия не имею. По идее нам ее нужно обратно конвертировать в модель (пытался через JSON.parse,но думаю это не то)и как то вызвать мое представление с этой моделью.Пока ждал ответа попробовал что-то в интернете найти,но до сих пор не понимаю в какую сторону копать.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722650
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenix, полученную JSON-строку необходимо преобразовать в объект, в Вашем случае в массив. Используйте метод JSON.parse.
Далее работайте с полученным массивом данных как Вам угодно в своём JavaScript коде.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38722667
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenix, судя по тому, что я вижу в первом сообщении, Вы должны передать полученный массив заданий (tasks) в примерно следующий метод:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function renderTasks(arrayOfTasks) {
    var html = [], i, task;

    for (i = 0; i < arrayOfTasks.length; i++) {
        task = arrayOfTasks[i];

        html.push('<div id="task">');
        html.push(task.Name);
        html.push('<a href="/EditTask?Task=', task.Id, '">изменить</a>');  
        html.push('<a class="link" href="/DeleteTask?Task=', task.Id, '">удалить</a>');
        html.push('</div>');
    }

    $('#tasks').html(html.join(''));
}
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38723146
redfenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,спасибо,все работает.Правда не знаю больно уж как то все неправильно получилось.Один и тот же html-код дублируется в двух местах.В одном месте с использованием razor,а в другом стандартный html.Не красиво как то.
...
Рейтинг: 0 / 0
asp.net+ xmlHttpRequest
    #38723247
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redfenix, а я Вам сразу на это намекнул: 16454485
Не за что.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net+ xmlHttpRequest
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]