Как передать несколько значений в контроллер MVC - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть таблица с различными частями данных.У меня также есть Html.TextAreaFor для ввода текста. Вот таблица

Мне нужно захватить текст в Textarea для .. отправить его на контроллер через ajax .post

<table class="table  table-striped table-hover  col-xl-12" id="policyTable">
<tr class="thead-dark">
    <th class="toggleMe1">
        UnderWriter
    </th>
    <th class="toggleMe2">
        @Html.DisplayNameFor(model => model.Client)
    </th>

    <th>
        Exp-Policies
    </th>

    <th>
        Exp-Date
    </th>
    <th class="hideMe">
        Date - Updated
    </th>
    <th>
        Reviewed-By
    </th>
    <th>
        Email-Created
    </th>
    <th>
        @Html.DisplayNameFor(model => model.CAB)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.LossRun)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.MMS)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Notes)
    </th>
    <th></th>
</tr>

@foreach (var item in Model)
{
    <tr id="id_@item.Id">
        <td class="hideMe">
            @Html.DisplayFor(modelItem => item.Id, new { id = "VisibleID" })
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NewUw)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Client)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Expiring_Policies)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.ExpDate)



        <td class="hideMe">
            @Html.DisplayFor(modelItem => item.DateUpdated)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.InsertedBy)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.EmailCreated)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CAB)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LossRun)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MMS)
        </td>

        <td style="width: 25%; height: 120px;">
            <div class="form-group">
                @* @Html.LabelFor(model => model.Notes, htmlAttributes: new { @class = "control-label col-md-2" })*@
                <div class="col-md-12">
                    @Html.TextAreaFor(modelItem => item.Notes, new { @class = "form-control textAreaCS", @rows = 8 })
                    @Html.ValidationMessageFor(modelItem => item.Notes, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="col-12 ml-3">
                <div class="row">
                    <input type="submit" value="Save" id="notes" class="btn btn-outline-primary btn-sm col-2" style="font-size: 16px" />
                    <div class="col-1">
                        @if (TempData["LB"] != null)
                        {
                            <div class="alert alert-danger text-center text-capitalize" style="font-size: 16px;">
                                @TempData["LB"]
                            </div>
                        }
                    </div>
                </div>

            </div>
        </td>
        <td>
            @Html.ActionLink("Review", "EditPolicy", new { id = item.Id }, new { @class = "review" })
        </td>
    </tr>
}

</table>

Вот вызов ajax

    var url = "/Policy/CompletedNotes";
        var policyNotes = $("#item_Notes").text();
        var id = $("#VisibleID").val();
        $("input#notes").on('click', function () {

            alert(id);
            var data = JSON.stringify({ Id: id, polNotes: policyNotes });

            $.ajax({
                url: '/Policy/CompleteNotes',
                type: 'POST',
                contentType: 'application/json',
                data: data,
                success: function () {
                    alert('success');
                }
            });

Я передаю идентификатор строки и текст в текстовом поле.Вот контроллер, который я передаю

  [HttpPost, ValidateInput(false)]
    public ActionResult CompletedNotes(CompletedPolicyVM completedPolicy, string Id, string polNotes)
    {


        int val = Convert.ToInt32(Id);


        using (Db db = new Db())
        {
            int id = completedPolicy.Id;


            NotesDTO notesDTO = db.notes.Find(id);

            if (notesDTO == null )
            {
                return Content("This policy cannot be found." + Id);
            }

            //instantiate a stringbuilder variable so I can append the text when inserting in db. 
            var sb = new StringBuilder();
            const char carriageReturn = (char)13;
            const char newLine = (char)10;
            string insertedDate = "Inserted on " + DateTime.Now.ToString("MM/dd/yyyy HH:mm") + " by " + User.Identity.Name;


            if (notesDTO.Notes == null || notesDTO.Notes == String.Empty)
            {
                notesDTO.Notes = sb.AppendLine(insertedDate).ToString() + " " + polNotes + "\n";
            }
            else
            {
                notesDTO.Notes += newLine + sb.AppendLine(insertedDate).ToString() + " " + polNotes + "\n";
            }

            db.SaveChanges();


        }


        //Save TempData message
        TempData["SM"] = "Policy saved correctly!";

        //redirect
        return RedirectToAction("CompletedPolicies");
    }

Проблема:

Не работает.Он не передает значения в контроллер.Это ноль каждый раз.Я пробовал кучу разных вызовов ajax. Ничего не работает.Я могу захватить идентификатор, но не текст, и когда он достигает контроллера, он становится нулевым.Если это не так, как я могу просто отправить идентификатор строки .. и текст, напечатанный в текстовом поле, в контроллер.

1 Ответ

0 голосов
/ 24 апреля 2019

Данные, которые передают строку, а также параметр, полученный вами как completePolicy, являются пустыми и не являются его частью.

Ваши данные:

"{"Id":"id","polNotes":" policyNotes"}"

данные должны быть типа json

{ Id: 'id', polNotes:' policyNotes' }

это не нужно:

JSON.stringify({ Id: 'id', polNotes:' policyNotes' });

и действие должно быть таким:

[HttpPost, ValidateInput(false)]
    public ActionResult CompletedNotes( int Id, string polNotes)
    {
using (Db db = new Db())
        {
CompletedPolicyVM completedPolicy=db.CompletedPolicyVM .Find(id);
    NotesDTO notesDTO = db.notes.Find(id);
.
.
.

 db.SaveChanges();
}

AJAX:

 var data = { Id: id, polNotes: policyNotes };

            $.ajax({
                url: '/Policy/CompleteNotes',
                type: 'POST',
                contentType: 'application/json',
                data: data,
                success: function () {
                    alert('success');
                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...