C# ActionLink MVC4 — передать несколько параметров в ActionResult

--Очень новичок в C# и MVC--

В моих представлениях/задачах/Index.aspx у меня есть следующая строка/ячейки, заключенные в таблицу

<tr>
    <td><%:
            Html.ActionLink(
                HttpUtility.HtmlDecode("&#65291;"),
                "Insert",
                "Tasks",
                new { onclick = "InsertTask();" },
                new { @class = "ActionButton AddButton" }
           )
        %></td>
    <td><input type="text" id="txtAddName" style="width: 200px;" /></td>
    <td><input type="text" id="txtAddDescription" style="width: 400px;"/></td>
    <td><input type="text" id="txtAddStarting" style="width: 200px;" /></td>
    <td><input type="text" id="txtAddEnding" style="width: 200px;" /></td>
</tr>

А также в том же файле у меня есть

<% if (ViewBag.Message != null) { %>
<%: ViewBag.Message %>
<% } %>

<script type="text/javascript">
    function InsertTask() {
        var name =      $('#txtAddName').val();
        var desc =      $('#txtAddDescription').val();
        var starting =  $('#txtAddStarting').val();
        var ending =    $('#txtAddEnding').val();

        $.ajax({
            url: "Insert/" + name + "," + desc + "," + starting + "," + ending,
            context: document.body
        }).done(function () {
            alert("done!");
        });
    }
</script>

В моем файле Controllers/TasksController.cs у меня есть следующие ActionResult(s)

   public ActionResult Index()
    {
        //Create an array of tasks

        //Place task objects into variable tasks

        //Create the view model
        TaskIndexViewModel tivm = new TaskIndexViewModel
        {
            NumberOfTasks = tasks.Count(),
            Tasks = tasks
        };

        //Pass the view model to the view method
        return View(tivm);
    }


  public ActionResult Insert(string Name, string Description, String Starting, String Ending)
  {
      //Insert records to DB

      //Notify
      ViewBag.Message = "Insert Successful";

      //Return success
      return RedirectToAction("Index");
  }

Когда я нажимаю на элемент ActionLink, он

  1. Не вызывает функцию JS
  2. Вызывает ли Insert ActionResult (как-то даже без передачи параметров?)
  3. Обновление страницы (от которого я в конечном итоге хочу избавиться) ничего не показывает для ViewBag.Message

Моя конечная цель... состоит в том, чтобы ActionLink вызывал ActionResult через AJAX/JQuery и отображал ответное сообщение "Успех"... без полной перезагрузки страницы.


ИЗМЕНИТЬ


Из ответа SLaks я изменил свой ActionLink на приведенный ниже код... И добавил «return false;» до конца моей функции JS.

            <td><%:
                    Html.ActionLink(
                        HttpUtility.HtmlDecode("&#65291;"),
                        "Insert",
                        "Tasks",
                        null,
                        new { onclick = "InsertTask();"  , @class = "ActionButton AddButton" }
                    )
                %></td>

Теперь он вызывает метод ActionResponse контроллера .CS... но все полученные параметры пусты.


person adam    schedule 30.05.2013    source источник
comment
Кстати, вы можете просто написать в своем исходном коде вместо вызова HtmlDecode.   -  person SLaks    schedule 30.05.2013
comment
Пробовал это, но моя программа выдает каждый формат, который я пытаюсь. +(+) -- (++) -- ++ .. и т.д...   -  person adam    schedule 30.05.2013
comment
Нет; Я имею в виду буквальный символ . Вам не нужны escape-последовательности HTML в C#; вы можете просто написать "+".   -  person SLaks    schedule 30.05.2013
comment
О, поймал. персонаж, который я использую, немного отличается и более жирный. =П   -  person adam    schedule 30.05.2013
comment
+ — это символ, который вы используете. Вы можете написать это прямо в источнике.   -  person SLaks    schedule 30.05.2013


Ответы (2)


Вам нужно return false из встроенного обработчика, чтобы браузер не выполнял действие по умолчанию (переход к ссылке)

person SLaks    schedule 30.05.2013
comment
Я ценю обратную связь... но, как уже упоминалось, очень новичок в C # и MVC. Я совершенно не знаю, где будет встроенный обработчик. И я считаю, что это решает только одну проблему, полную перезагрузку страницы? - person adam; 30.05.2013
comment
@adam: `onclick = InsertTask();`` — это встроенный обработчик, но он находится не в том месте. Посмотрите на сгенерированный источник, и вы поймете, что я имею в виду. - person SLaks; 30.05.2013
comment
Спасибо, это привело меня в правильном направлении. Я опубликую обновление своего OP моего текущего кода. Сейчас функция вызывается, но ни один из параметров в ActionResult не имеет значения. - person adam; 30.05.2013
comment
Это не то, как работают URL-адреса действий. Вам нужно либо создать URL-адрес, соответствующий маршруту, либо создать строку запроса. Передача аргумента data в jQuery создаст для вас строку запроса. - person SLaks; 30.05.2013

Если вы измените свой вызов ajax на это, он должен работать:

$.ajax({
        url: "Tasks/Insert",
        data: { name: name, description: desc, starting: starting, ending: ending },
        context: document.body
    }).done(function () {
        alert("done!");
    });
person Richard Dalton    schedule 30.05.2013