как вернуть параметр вместе с URL (jquery datatables & ASP.NET MVC) - PullRequest
0 голосов
/ 23 января 2019

Я хочу позволить пользователям изменять описания в таблице, дважды щелкнув по строке и перенаправив в editView. По этой причине я хочу передать параметр Id, который хранится в базе данных вместе с маршрутом к действию. Вот как это выглядит в реальном коде:

Как это объявлено в mainView. :

@Html.Hidden("RedirectToChange", Url.Action("Index", "Edit"))

    //main table
    var dataTable;
    var redirectToRun = $("#RedirectToRun").val();
    var redirectToChange = $("#RedirectToChange").val();

    $(document).ready(function () {

        dataTable = $("#interfaceTable").DataTable({
            "ajax": {
                "url": "/Interface/GetData",  
                "type": "GET",
                "datatype": "json",
                {...here goes the table...}

        $('#interfaceTable').on('dblclick', 'tbody tr', function (data) {
     return $("InterfaceID").attr("href", redirectToChange); 
    }); //this function doesn't work but shows the general idea 

Контроллеры:

public class EditController : Controller
    {
        [HttpGet]
        public ActionResult Index(int? id)
        {
            try {
                var ctx = new LoginDataBaseEntities();
                var inter = ctx.Interfaces.Single(i => i.InterfaceID == id);
                return View(inter);
            }

            catch (Exception e)

            {
                return Json(new { messege = e.Message }, JsonRequestBehavior.AllowGet);
            }

        }

        [HttpPost]
        public ActionResult EditDescription(Interface changes)
        {
            string description = changes.Description;
            var ctx = new LoginDataBaseEntities();
            var inter = ctx.Interfaces.Single(i => i.InterfaceID == changes.InterfaceID);
            inter.Description = changes.Description;
            ctx.SaveChanges();
            return RedirectToAction("Index","Interface");  
        }
    }

EditView:

<h2>Edit</h2>
@*showing current description*@
@using (Html.BeginForm("HintDescription", "Edit", new { id = Model.InterfaceID }, FormMethod.Get ))
{
    <div class="text-body">
        @Html.DisplayTextFor(m => m.Description)
    </div>
}

@*change the description*@
@using (Html.BeginForm("EditDescription", "Edit", new { id = Model.InterfaceID }, FormMethod.Post))
{

    <form class="form-group">

        <div class="form.field">
            @Html.HiddenFor(m => m.InterfaceID);
            @Html.EditorFor(m => m.Description, new { placeholder = "Description" })
        </div>
        <br />
        <div>
            <input type="submit" class="btn-outline-primary" value="Change" />
        </div>
    </form>
}

По сути, мой вопрос заключается в том, как написать правильную функцию js для передачи параметра в контроллер или, если я полностью ошибаюсь в подходе, как сделать все правильно?

1 Ответ

0 голосов
/ 23 января 2019

$ (документ) .ready (function () {$ ("# interfaceTable"). Click (function () {

    var _model = {
        var redirectToRun = $("#RedirectToRun").val();
var redirectToChange = $("#RedirectToChange").val();
    };
    $.ajax({
        type: "POST",
        url: ".."/Interface/GetData",  
        data: { model: _model },

        success: function (d) {
          alert("successful")
        },
        error: function (xhr, textStatus, errorThrown) {
            alert("Error")
        }
    });
})

});

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