Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
1

Система комментариев с использованием jQuery

18.05.2018, 11:57. Просмотров 741. Ответов 38
Метки нет (Все метки)

Привет.
Пишу блог.
Есть модель Post :
C#
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
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
 
namespace Common.Models
{
    public sealed class Post
    {
        [HiddenInput(DisplayValue = false)]
        public int Id { get; set; }
        [Display(Name = "Title")]
        public string Title { get; set; }
        [Display(Name= "Description")]
        public string Description { get; set; }
        [Display(Name = "Content")]
        public string Content { get; set; }
        [Display(Name = "Attach File")]
        public byte[] ImageData { get; set;}
        public byte[] ImageThumbnail { get; set; }
        private int ContentLimit = 950;
        public string ContentTrimmed
        {
            get
            {
                if (Content.Length > ContentLimit)
                    return Content.Substring( 0, ContentLimit ) + "...";
                else
                    return Content;
            }
        }
        [Display(Name = "Category")]
        public string Category { get; set; }
        [Display( Name = "Posted" )]
        public DateTime PostedDateTime { get; set; }
        [Display( Name = "Modified" )]
        public DateTime? ModifiedDateTime { get; set; }
        public string ImageMimeType { get; set; }
        public string Author { get; set; }
        public string DefaultImageName { get; set; }
        public bool IsApproved { get; set; }
        public bool IsDeclined { get; set; }
        public bool IsDeleted { get; set; }
        [B]public ICollection<Comment> Comments { get; set; }[/B]
 
        public Post ()
        {
            IsApproved = false;
            IsDeclined = false;
            IsDeleted = false;
            PostedDateTime = DateTime.Now;
            [B]Comments = new List<Comment>();[/B]
        }
 
    }
}
Есть модель Comment:
C#
1
2
3
4
5
6
7
8
9
10
namespace Common.Models
{
    public class Comment
    {
        public int Id { get; set; }
        public string Content { get; set; }
        public string Author { get; set; }
        public int PostId { get; set; }
    }
}
На главную вьюху выводится список постов с кратким содержанием, у каждого поста есть кнопка
HTML5
1
2
3
4
<div>
                            @Ajax.ActionLink( "Continue reading...", "PostViewUnauth", new { post.Id },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "btn btn-outline-secondary" } )
                        </div>
Которая передает Частичному представлению PostViewUnauth айдишник поста, на котором нажата кнопка, а это представление прорисовывается на определенном участке главною вьюхи.
Я хочу внедрить систему комментариев (Коммент пишется - Сразу отображается под постом - Записывается в БД).
Но пока хочу чтобы просто записывалось в бд и отображалось на алерте.
В том самом частичном представлении сделал форму:
HTML5
1
2
3
4
5
6
7
8
9
10
 <div id="comments">
        <form id="commentForm">
            <div class="form-group">
                <label for="textArea">Add some comment in form below</label>
                <textarea class="form-control" id="textArea" rows="3"></textarea>
            </div>
        </form>
        <button type="submit" form="commentForm" value="Submit" id="Submit">Submit</button>
        <button type="reset" form="nameform" value="Cancel">Cancel</button>
    </div>
Написал скрипт:
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
 <script>
        var actionPath = "/Comments/Create";
        var commentCont = $('#textArea').val();
        var postId = @item.Id;
        var currUser = @User.Identity.Name;
        var comment = {
            Content: commentCont,
            PostId: postId,
            Author: currUser
        };
        $(document).ready(function() {
            $('#commentForm').submit(function() {
                $.ajax({
                    sync: false, 
                    type: "POST",
                    data: JSON.stringify(comment),
                    url: actionPath,
                    contentType: "application/json",
                    success: function(response) {
                        alert("New comment: " + response.comment.Content);
                    },
                    failure: function(response) {
                        alert(response.responseText);
                    },
                    error: function(response) {
                        alert(response.responseText);
                    }
                });
            });
        });
    </script>
Вот экшкн контроллера для создания коммента:
C#
1
2
3
4
5
6
7
8
9
10
[System.Web.Http.HttpPost]
        public JsonResult Create( [FromBody] Comment comment )
        {
            if (ModelState.IsValid)
            {
                db.Comments.Add( comment );
                db.SaveChanges();
            }
            return Json(new {comment});
        }
При нажатии на Submit под формой ничего не происходит, просто обновляется главная вьюха Index.

Помогите разобраться в чем проблема.

Прилагаю скрины ошибок консоли браузера при нажатии на Submit.
0
Миниатюры
Система комментариев с использованием jQuery   Система комментариев с использованием jQuery  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2018, 11:57
Ответы с готовыми решениями:

Книги по JQuery(JQuery UI) и Ajax в Asp.Net
Добрый день! Посоветуйте пожалуйста хорошую книгу по использованию JavaScrip на...

Обновление комментариев на странице
есть страницы с комментариями. Как сделать сделать онлайн обновление, чтобы...

Создание комментариев для статей блога
Всем привет! Только начал изучать ASP .NET MVC и столкнулся с проблемой: не...

Прокрутка комментариев на JQuery
Привет. Дано: есть комментарии на сайте. Добавляются комментарии в линию...

Редактирование комментариев через jQuery UI
Здравствуйте. Разбираюсь с новым и непривычным jQuery. Есть такая задача - дан...

38
kingzfate
Unnamed
147 / 149 / 76
Регистрация: 09.06.2011
Сообщений: 749
Завершенные тесты: 1
18.05.2018, 12:09 2
Nik_Sun1986, а почему вы не используете встроенные методы Razor?
C#
1
2
3
@using (Ajax.BeginForm("Create", new AjaxOptions { UpdateTargetId = "results",LoadingElementId="loading",  LoadingElementDuration=1000}))                
{
}
И через LoadingElementId, обрабатывать всю информацию в контроллере, отправлять в partial и выводить
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 12:19  [ТС] 3
Дело в том, что задача стоит - использовать jQuery.

Да и я сам хочу разобраться с jQuery+AJAX
0
kingzfate
Unnamed
147 / 149 / 76
Регистрация: 09.06.2011
Сообщений: 749
Завершенные тесты: 1
18.05.2018, 12:35 4
Nik_Sun1986, попробуй так
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 var commentCont = $('#textArea').val();
        var postId = @item.Id;
        var currUser = @User.Identity.Name;
        $.ajax({
                url: '@Url.Action("Create", "Comments")',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: { Content: commentCont, PostId: postId, Author: currUser },                 
                success: function (response) {
                   alert(response);
                },
                error: function (response) {
                    alert("error");
                }
            });
И в контроллере, обратно возвращай строку
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public JsonResult Create(string Content, string PostId, string Author)
        {
            try
            {
                  db.Comments.Add(Content);
                  db.SaveChanges();              
                  return Json(Content.ToString(), JsonRequestBehavior.AllowGet);
                }
                return Json("Ошибка обновления данных", JsonRequestBehavior.AllowGet);
            }
            catch (Exception e)
            {
                return Json(e.Message, JsonRequestBehavior.AllowGet);
            }
        }
И вот это db.Comments.Add(Content);db.SaveChanges(); перенеси лучше в DOM, это не нужно в контроллере, если ты конечно хочешь полностью использовать MVC
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 12:58  [ТС] 5
Ваше не работало, я чуть исправил, но результат тот же:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public JsonResult Create( string content, int postId, string author )
        {
            var comment = new Comment
            {
                Author = author,
                Content = content,
                PostId = postId
            };
            try
            {
                db.Comments.Add( comment );
                db.SaveChanges();
                return Json( comment.ToString(), JsonRequestBehavior.AllowGet );
            }
            catch (Exception e)
 
            {
                return Json( e.Message, JsonRequestBehavior.AllowGet );
            }
 
        }
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
<script>
        console.log(@item.Content);
 
        var actionPath = "/Comments/Create";
        var commentCont = $('#textArea').val();
        var postId = @item.Id;
        var currUser = @User.Identity.Name;
        var comment = {
            Content: commentCont,
            PostId: postId,
            Author: currUser
        };
        $(document).ready(function() {
            var commentCont = $('#commentForm').val();
            var postId = @item.Id;
            var currUser = @User.Identity.Name;
            $.ajax({
                url: '@Url.Action("Create", "Comments")',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: { Content: commentCont, PostId: postId, Author: currUser },
                success: function(response) {
                    alert(response);
                },
                error: function(response) {
                    alert("error");
                }
            });
        });
    </script>
0
kingzfate
Unnamed
147 / 149 / 76
Регистрация: 09.06.2011
Сообщений: 749
Завершенные тесты: 1
18.05.2018, 13:00 6
Nik_Sun1986, значит что-то еще влияет, код я проверял перед отправкой и использую в своих приложениях.
И мне кажется вот это @item.Id; у вас ничего не вернет в JS
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 13:12  [ТС] 7
То есть то, как я исправил - нормально?

Добавлено через 4 минуты
Давайте, я еще покажу это самое частичное представление
C#
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
@model IEnumerable<Common.Models.Post>
 
 
@foreach (var item in Model)
{
    <div class="container  ">
        <div class="row bg-light">
            <div class="col-md-3">
                <div class="d-flex justify-content-center">
                    <span class="font-weight-light">
                        @{
                            var shortdate = item.PostedDateTime.ToString( "MMMM d, yyyy" );
                        }
                        @Html.DisplayFor( modelItem => shortdate )
                    </span>
                </div>
                <div class="d-flex justify-content-center">
                    <h4>@Html.DisplayFor( modelItem => item.Title )</h4>
                </div>
                <div class="d-flex justify-content-center">
 
                    <h6>@Html.DisplayFor( modelItem => item.Category )</h6>
                </div>
                <div class="d-flex justify-content-center">
 
                    <img src="@Url.Action("GetThumbnailImage", "Posts", new {item.Id})" alt="PostImage" width="170" height="170" />
                </div>
                <div class="d-flex p-2 justify-content-center">
                    @{
 
                        if (item.Author != null && item.Author != User.Identity.Name)
                        {
                            @Ajax.ActionLink( "Author: " + item.Author, "AuthorFilter", "Home",
                                new { text = item.Author },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "badge badge-warning" }
                                )
                        }
                        if (item.Author == null)
                        {
                            @Ajax.ActionLink( @"Author unknown", "AuthorFilter", "Home",
                                new { text = item.Author },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "badge badge-secondary" }
                                )
                        }
                        if (item.Author != null && item.Author == User.Identity.Name)
                        {
                            <div>
                                <span class="badge badge-success"><b>MY POST</b></span>
                            </div>
                        }
                    }
                </div>
            </div>
            <div class="col-md-9">
                <div class="d-flex justify-content-between">
                    <h3>@Html.DisplayFor( modelItem => item.Description )</h3>
                </div>
                <div class="d-flex justify-content-start">
                    <p>
                        @Html.DisplayFor( modelItem => item.ContentTrimmed )
                    </p>
 
                </div>
                <div class="d-flex p-3 align-bottom justify-content-around">
                    <div>
                        @Ajax.ActionLink( "All posts about " + item.Category, "CategoryFilter", "Home",
                            new { text = item.Category },
                            new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "btn btn-outline-secondary" }
                            )
                    </div>
                    <div>
                        <a class="btn btn-outline-warning" href="@Url.Action( "Index", "Home")"> Back to main page </a>
                    </div>
                    @if (item.Author != null && item.Author == User.Identity.Name)
                    {
                        <div>
                            @Ajax.ActionLink( @"Edit", "Edit", "Posts",
                                new { id = item.Id },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = " btn btn-outline-secondary" }
                                )
                        </div>
                        <div>
                            @Ajax.ActionLink( @"Delete", "Delete", "Posts",
                                new { id = item.Id },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "btn btn-outline-secondary" }
                                )
                        </div>
                    }
                </div>
            </div>
        </div>
    </div>
    <div id="commentBlock">
        <p>Some comment</p>
    </div>
    <div id="comments">
        <form id="commentForm">
            <div class="form-group">
                <label for="textArea">Add some comment in form below</label>
                <textarea class="form-control" id="textArea" rows="3"></textarea>
            </div>
        </form>
        <button type="submit" form="commentForm" value="Submit" id="Submit">Submit</button>
        <button type="reset" form="nameform" value="Cancel">Cancel</button>
    </div>
    <script>
        console.log(@item.Content);
 
        var actionPath = "/Comments/Create";
        var commentCont = $('#textArea').val();
        var postId = @item.Id;
        var currUser = @User.Identity.Name;
        var comment = {
            Content: commentCont,
            PostId: postId,
            Author: currUser
        };
        $(document).ready(function() {
            var commentCont = $('#commentForm').val();
            var postId = @item.Id;
            var currUser = @User.Identity.Name;
            $.ajax({
                url: '@Url.Action("Create", "Comments")',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: { Content: commentCont, PostId: postId, Author: currUser },
                success: function(response) {
                    alert(response);
                },
                error: function(response) {
                    alert("error");
                }
            });
        });
    </script>
                        }
@item.Id вернет айдишник поста, который открыт. В этом представлении сверху используется модель Post и все в нем происходит в foreach(var item in Model) {}
0
kingzfate
Unnamed
147 / 149 / 76
Регистрация: 09.06.2011
Сообщений: 749
Завершенные тесты: 1
18.05.2018, 13:22 8
Nik_Sun1986, Закройте функцию foreach раньше, не надо создавать кучу одних и тех же скриптов
Первое, сделайте функцию
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function CreatePost(btn)
{
var commentCont = $('#textArea').val();
        var postId = btn.id;
        var currUser = @User.Identity.Name;
        $.ajax({
                url: '@Url.Action("Create", "Comments")',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: { Content: commentCont, PostId: postId, Author: currUser },                 
                success: function (response) {
                   alert(response);
                },
                error: function (response) {
                    alert("error");
                }
            });
}
И во вьюхе <button type="button" id="@item.Id" onclick="CreatePost(this)>Submit</button>
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 14:24  [ТС] 9
Такс, помести в самый верх вьюхи функцию
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
    function CreatePost(btn) {
        var commentCont = $('#commentForm').val();
        var postId = btn.id;
        var currUser = @User.Identity.Name;
        $.ajax({
            url: '@Url.Action("Create", "Comments")',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: { Content: commentCont, PostId: postId, Author: currUser },
            success: function(response) {
                alert(response);
            },
            error: function(response) {
                alert("error");
            }
        });
    };
</script>
Внизу форма и на ней кнопки
HTML5
1
2
3
4
5
6
7
8
9
10
<div id="comments">
        <form id="commentForm">
            <div class="form-group">
                <label for="textArea">Add some comment in form below</label>
                <textarea class="form-control" id="textArea" rows="3"></textarea>
            </div>
        </form>
        <button type="button" id="@item.Id" onclick="CreatePost(this)">Submit</button>
        <button type="reset" form="nameform" value="Cancel">Cancel</button>
    </div>
В консоли браузера ошибка:
Uncaught ReferenceError: CreatePost is not defined
at HTMLButtonElement.onclick (Index:1)
onclick @ Index:1

И да, я в скрипте обрабатываю сабмит формы commentForm, а не текстАреа textArea
0
kingzfate
Unnamed
147 / 149 / 76
Регистрация: 09.06.2011
Сообщений: 749
Завершенные тесты: 1
18.05.2018, 14:39 10
Nik_Sun1986, сначала html, потом скрипт! У вас же явно в ошибке написано...
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 14:44  [ТС] 11
проблему не решило , еще раз предоставлю всю вьюху

HTML5
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
@model IEnumerable<Common.Models.Post>
 
 
@foreach (var item in Model)
{
    <div class="container  ">
        <div class="row bg-light">
            <div class="col-md-3">
                <div class="d-flex justify-content-center">
                    <span class="font-weight-light">
                        @{
                            var shortdate = item.PostedDateTime.ToString( "MMMM d, yyyy" );
                        }
                        @Html.DisplayFor( modelItem => shortdate )
                    </span>
                </div>
                <div class="d-flex justify-content-center">
                    <h4>@Html.DisplayFor( modelItem => item.Title )</h4>
                </div>
                <div class="d-flex justify-content-center">
 
                    <h6>@Html.DisplayFor( modelItem => item.Category )</h6>
                </div>
                <div class="d-flex justify-content-center">
 
                    <img src="@Url.Action("GetThumbnailImage", "Posts", new {item.Id})" alt="PostImage" width="170" height="170" />
                </div>
                <div class="d-flex p-2 justify-content-center">
                    @{
 
                        if (item.Author != null && item.Author != User.Identity.Name)
                        {
                            @Ajax.ActionLink( "Author: " + item.Author, "AuthorFilter", "Home",
                                new { text = item.Author },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "badge badge-warning" }
                                )
                        }
                        if (item.Author == null)
                        {
                            @Ajax.ActionLink( @"Author unknown", "AuthorFilter", "Home",
                                new { text = item.Author },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "badge badge-secondary" }
                                )
                        }
                        if (item.Author != null && item.Author == User.Identity.Name)
                        {
                            <div>
                                <span class="badge badge-success"><b>MY POST</b></span>
                            </div>
                        }
                    }
                </div>
            </div>
            <div class="col-md-9">
                <div class="d-flex justify-content-between">
                    <h3>@Html.DisplayFor( modelItem => item.Description )</h3>
                </div>
                <div class="d-flex justify-content-start">
                    <p>
                        @Html.DisplayFor( modelItem => item.ContentTrimmed )
                    </p>
 
                </div>
                <div class="d-flex p-3 align-bottom justify-content-around">
                    <div>
                        @Ajax.ActionLink( "All posts about " + item.Category, "CategoryFilter", "Home",
                            new { text = item.Category },
                            new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "btn btn-outline-secondary" }
                            )
                    </div>
                    <div>
                        <a class="btn btn-outline-warning" href="@Url.Action("Index", "Home")"> Back to main page </a>
                    </div>
                    @if (item.Author != null && item.Author == User.Identity.Name)
                    {
                        <div>
                            @Ajax.ActionLink( @"Edit", "Edit", "Posts",
                                new { id = item.Id },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = " btn btn-outline-secondary" }
                                )
                        </div>
                        <div>
                            @Ajax.ActionLink( @"Delete", "Delete", "Posts",
                                new { id = item.Id },
                                new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "main_area" }, htmlAttributes: new { @class = "btn btn-outline-secondary" }
                                )
                        </div>
                    }
                </div>
            </div>
        </div>
    </div>
 
    <div id="commentBlock">
        <p>Some comment</p>
    </div>
 
    <div id="comments">
        <form id="commentForm">
            <div class="form-group">
                <label for="textArea">Add some comment in form below</label>
                <textarea class="form-control" id="textArea" rows="3"></textarea>
            </div>
        </form>
        <button type="button" id="@item.Id" onclick="CreatePost(this)">Submit</button>
        <button type="reset" form="nameform" value="Cancel">Cancel</button>
    </div>
 
                        }
<script>
    function CreatePost(btn) {
        var commentCont = $('#commentForm').val();
        var postId = btn.id;
        var currUser = @User.Identity.Name;
        $.ajax({
            url: '@Url.Action("Create", "Comments")',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: { Content: commentCont, PostId: postId, Author: currUser },
            success: function(response) {
                alert(response);
            },
            error: function(response) {
                alert("error");
            }
        });
    };
</script>
0
kingzfate
Unnamed
147 / 149 / 76
Регистрация: 09.06.2011
Сообщений: 749
Завершенные тесты: 1
18.05.2018, 14:48 12
Nik_Sun1986, покажите ошибки и какие данные принимает контроллер (если вообще дело до него доходит)
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 14:56  [ТС] 13
Вот ошибки браузера, сейчас подебажу - посмотрю доходит ли дело до контроллера
0
Миниатюры
Система комментариев с использованием jQuery  
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 15:12  [ТС] 14
нет ,до контроллера дело не доходит.
Мне кажеться все сыпется на скрипте
0
IamRain
1310 / 1199 / 370
Регистрация: 02.08.2011
Сообщений: 3,485
18.05.2018, 15:13 15
Цитата Сообщение от Nik_Sun1986 Посмотреть сообщение
При нажатии на Submit под формой ничего не происходит, просто обновляется главная вьюха Index.
Nik_Sun1986,

1. $("form selector").submit() - производит просто привязку к событию отправки формы, и это будет синхронная отправка. Насколько я знаю, вам нужно отменить дефолтное действие при отправки, с помощью event.preventDefault() (либо return false). И только затем отправлять ваш ajax.

Из доков по Jquery:
This happens prior to the actual submission, so we can cancel the submit action by calling .preventDefault() on the event object or by returning false from our handler.
Вообщем, тут у вас матчасть по jquery немного подкачала.

2.
Цитата Сообщение от Nik_Sun1986 Посмотреть сообщение
В том самом частичном представлении сделал форму:
Цитата Сообщение от Nik_Sun1986 Посмотреть сообщение
Написал скрипт:
Если скрипт написан в partial view, то $(document).ready тут не работает, поскольку событие загрузки документа уже произошло.
Либо перенесите этот скрипт в основную вьюху, либо просто пишите код привязки просто кодом в функции:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(function(){
     $('#commentForm').submit(function(event) {
                event.preventDefault();
                $.ajax({
                    sync: false, 
                    type: "POST",
                    data: JSON.stringify(comment),
                    url: actionPath,
                    contentType: "application/json",
                    success: function(response) {
                        alert("New comment: " + response.comment.Content);
                    },
                    failure: function(response) {
                        alert(response.responseText);
                    },
                    error: function(response) {
                        alert(response.responseText);
                    }
                });
})()
0
sau
1905 / 1566 / 251
Регистрация: 22.07.2011
Сообщений: 5,882
Завершенные тесты: 1
18.05.2018, 15:19 16
Цитата Сообщение от Nik_Sun1986 Посмотреть сообщение
Мне кажеться все сыпется на скрипте
Серьезно ? )) - три критические ошибки в скриптах это как бы пустяки ? , которые блокируют нормальную работу связанных скриптов и в том числе отправку запроса на сервер. Начните с исправления синтаксических ошибок.
1
IamRain
1310 / 1199 / 370
Регистрация: 02.08.2011
Сообщений: 3,485
18.05.2018, 15:21 17
Понятно, что скрипт должен знать, что такое #commentForm.
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 15:33  [ТС] 18
IamRain, Добрый день.
Я поменял скрипт на Ваш и все -равно выбрасывает на главную , после нажатия Submit
0
IamRain
1310 / 1199 / 370
Регистрация: 02.08.2011
Сообщений: 3,485
18.05.2018, 15:39 19
Цитата Сообщение от Nik_Sun1986 Посмотреть сообщение
выбрасывает на главную , после нажатия Submit
Ошибки в консоли браузера?

Смотрите, что мешает отправке запроса:
Попробуйте заняться отладкой, либо средствами браузера, либо с помощью директивы javascript-a debugger:
UPD: если не видно jquery, проброситье ее в функцию. Хотя, думаю, должно быть видно.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(function($){
     $('#commentForm').submit(function(event) {
                event.preventDefault();
                debugger; // <-- это оно
                $.ajax({
                    sync: false, 
                    type: "POST",
                    data: JSON.stringify(comment),
                    url: actionPath,
                    contentType: "application/json",
                    success: function(response) {
                        alert("New comment: " + response.comment.Content);
                    },
                    failure: function(response) {
                        alert(response.responseText);
                    },
                    error: function(response) {
                        alert(response.responseText);
                    }
                });
})(window.jQuery)
0
Nik_Sun1986
1 / 1 / 2
Регистрация: 21.10.2016
Сообщений: 67
18.05.2018, 15:49  [ТС] 20
sau, подскажите, а вот у меня показывается ошибка Unexpected token

C#
1
2
3
4
5
 var currUser;
        if (@User.Identity.Name != " ")    // != ОШИБКА
            currUser = @User.Identity.Name;
        else
            currUser = "Unknown";
НО, и это !== ошибка и это != null и это != " "

Как правильно написать?
0
18.05.2018, 15:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2018, 15:49

Система комментариев
Народ возник вопрос как сделать большую систему комментариев что бы подключение...

Система комментариев для сайта на PHP
Привет, проверте этот файл со скриптом комментария на php. Проблема этого...

Система комментариев через соц сети
Что можете посоветовать, движок самописный.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru