'результат не определен' сообщение для контроллера с JS - PullRequest
0 голосов
/ 27 марта 2019

я пытаюсь опубликовать в mvc.core текстовое значение контроллера и значение id и получить ошибку js "результат не определен" и единственные данные контроллера, получающие значение идентификатора. Razor:

   <div class="well">
    <div class="row">
        <form asp-action="AddToSellList" method="post" class="form-horizontal shadow" style="padding: 10px;">
            @foreach (var item in Model)
            {
                <div class="well well-sm" style="background-color: white;">
                    <div class=" row">
                        <div class="col-sm-10 pull-right text-right">

                            @* Prop *@

                            @foreach (var qestion in item.QAViewModel)
                            {
                                <div id="@item.Id" class="collapse" style="background-color: gray">
                                    <p>Qestion</p>

                                    @* Prop *@

                                    @foreach (var ansewr in qestion.Answers)
                                    {
                                        @* Prop *@
                                    }
                                </div>
                            }

                        </div>

                        <div class="col-sm-2">
                            <button class="btnShowModal btn btn-primary btnWhiteSpace" id="@item.Id" type="button" value="@item.Id">
                                @item.Id
                                <i class="fas fa-info-circle" aria-hidden="true"></i>
                            </button>
                            <button type="button" class="btn btn-info" data-toggle="collapse" data-target="#@item.Id"> <i class="fas fa-question-circle" aria-hidden="true"></i>Bla bla </button>
                        </div>
                    </div>

                </div>

                //Check box for selecting items for Action  AddToSellList
                <input type="checkbox" name="Hiden" value="@item.Id"/>
            }
            <button type="submit" id="btt"> submit to Action AddToSellList</button>
        </form>
    </div>
</div>





  <div class="modal fade" tabindex="-1" id="loginModal"
     data-keyboard="false" data-backdrop="static">
    <div class="modal-dialog modal-sm ">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">
                    <i class="fas fa-window-close"></i>
                </button>
                <h4 class="modal-title">moder for posting for _AskQ </h4>
            </div>
            <div class="modal-body ">
                <form asp-action="_AskQ" class="form-horizontal" style="padding: 10px; " method="post">
                    <div asp-validation-summary="ModelOnly" class="text-danger"></div>

                    <input type="hidden" name="id" asp-for="@Model.First().SiteUserId" />
                    <div class="form-group">

                        <textarea name="Question" type="text" class="abc form-control text-right"id="a" required=""> </textarea>
                    </div>
                    <div class="modal-footer">
                        <button type="submit" class="btn btn-primary button button4">Ask</button>

                    </div>
                </form>

            </div>
        </div>
    </div>
</div>

Js: `

<script type="text/javascript">
        $(document).ready(function() {
            $('.collapse').on('shown.bs.collapse',
                function() {
                    $(".collapse").addClass('glyphicon-chevron-up').removeClass('glyphicon-chevron-down');
                });
        });

    </script>
    <script type="text/javascript">

        $(document).ready(function() {
            $(".btnShowModal").click(function() {
                    $("#loginModal").modal('show');
                    var id = $(this).attr("id");

                    //$(".button4").click(function(e) {
                    //    e.preventDefault();
                    $(".button4").click(function() {
                        url = '@Url.Action("_AskQ", "Bid")';

                        const value = $.trim($("textarea").val());
                        if (value === "") {
                            alert(value);
                        }
                        var data = {
                            Id: id,
                            value: value
                    };

                        console.log(id);
                        console.log(value);
                        $.ajax({
                            url: url,
                            data: data,
                            type: "POST"
                        }).done(function(result) {
                            $(id).html(result);
                        }).fail(function(x, s, e) {
                            alert("failed: " + s);
                        });
                    });
                }
            );
        });

`

контроллер:

[HttpPost]
    public IActionResult _AskQ(QAViewModel Vm)
    {
        if (!ModelState.IsValid)
        {
            return View(Vm);
        }

        var qustion = new QuoteQuestion
        {
            SiteUserId = _userManager.GetUserId(User),
            QuoteId = Vm.Id,
            Question = Vm.Question
        };

        _context.quoteQuestions.Add(qustion);
        _context.SaveChanges();
        if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
            ViewBag.q = qustion.Question;
            ViewBag.Id = qustion.QuoteId;
            ViewBag.SiteUId = qustion.SiteUserId;
        }
        return RedirectToAction("Index");
    }
  public class QAViewModel
{
    public int QuoteQuestionId { get; set; }
    public int Id { get; set; }
    public string Question { get; set; }
    public string SiteUserId { get; set; }
    public virtual IList<Answers> Answers { get; set; }
}

В данных после вызова ajax я вижу значение Id и значение Value, но он по-прежнему не может выполнить фактическую передачу в контроллер (только значение Id). Я публикую сообщение от имени ActionResult: индекс для имени ActionResult _AskQ

1 Ответ

0 голосов
/ 28 марта 2019

Попробуйте следующие изменения в вашем коде, обратите внимание на то, что имя передаваемых данных должно соответствовать параметру в действии

                $(".button4").click(function() {
                    const value = $.trim($("textarea").val());
                    if (value === "") {
                        alert(value);
                    }
                    var Vm = {
                        Id: id,
                        Question: value
                };

                    console.log(id);
                    console.log(value);
                    $.ajax({
                        type: "POST",
                        url: "/Bid/_AskQ",
                        contentType: "application/json",
                        data: "json",
                        data: JSON.stringify(Vm),

                        success: function (result) {
                            $(id).html(result);
                        },

                        error: function (x, s, e) {
                            alert("failed: " + s);
                        }

                    });
                });

Добавить атрибут [FromBody] в параметр при передаче типа jsondata

    [HttpPost]
    public IActionResult _AskQ([FromBody]QAViewModel Vm)

Тогда возвращаемое значение метода _AskQ должно быть результатом html json, который вы хотите отобразить с указанным идентификатором. Сделайте модификацию в соответствии с вашими потребностями。

...