Почему действие моего контроллера добавляет 2 новые записи вместо одной - PullRequest
0 голосов
/ 01 октября 2019

У меня есть простой вид бритвы с кнопкой, которая должна добавить новую запись в таблицу в моей базе данных SQL. К кнопке прикреплена функция ajax, которая вызывает контроллер.

Я пробовал два разных контроллера;оба контроллера работают, но добавляют 2 новые записи вместо одной. См. Ниже фрагменты кода:

Событие нажатия кнопки в виде бритвы

$('#addLike')
    .click(function (e) {
        var proposalId = 12;
        var url = "@Url.Action("AddLike", "Proposal")/?proposalId=" + proposalId;
            $.ajax({
                type: "POST",
                url: url,
                dataType: "json",
                traditional: true,
                success: function(response) {
                    window.location.href = actions.common.proposals;
                }
            });
    });

Модель класса

public class Proposal_Likes
{
    public int? Proposal_Id { get; set; }
    public int Id  { get; set; } (... Identity, DatabaseGenerated)
}

Контроллер

public ActionResult AddLike(int proposalId)
{
    var proposal_Like =  new Proposal_Likes
    {
        Proposal_Id = proposalId
    };

    UnitOfWork.InsertOrUpdate(proposal_Like);
    UnitOfWork.Commit();

    return Json("Success");
}

альтернативный контроллер

public ActionResult AddLike(int proposalId)
{
        using (SqlConnection con = new SqlConnection(cs))
        {
            using (SqlCommand cmd = new SqlCommand("addProposalLike", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@propsalId", SqlDbType.Int).Value = proposalId;
                con.Open();
                cmd.ExecuteNonQuery();
            }
        }

    return Json("Success");
}

Я работал над этим почти 2 дня, отладил весь код, но могуне найти причину или ключ, где копать глубже. Когда я выполняю хранимую процедуру SQL вручную внутри SSMS, она добавляет только одну запись. Будем благодарны за любую помощь!

Дополнительная информация: Нет представлений, никаких других кнопок в представлении

1 Ответ

0 голосов
/ 03 октября 2019

Я нашел причину: в моей функции ajax я использовал параметр в url.Action, чтобы передать его в контроллер ActionResult:

$.ajax({
type: "POST"
var url = "@Url.Action("AddLike", "Proposal")/?proposalId=" + proposalId;
...

public ActionResult AddLike(int proposalId)
{ ...}

Это вызвало двойной вызов контроллера. (Почему ... я не знаю). Когда я передаю параметр через часть данных вызова ajax

    var url = "@Url.Action("AddLike", "Proposal")";
         $.ajax({
             type: "POST",
             url: url,
             dataType: "json",
             data: {
                 proposalId: 24,
                    },

в модель и контроллер

public class ProposalViewModel
{
    public int proposalId { get; set; }
}

public ActionResult AddLike(ProposalViewModel model)
{   var propId = model.proposalId
    ...
}

, контроллер вызывается только один раз, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...