2013-11-29 2 views
1

На мой взгляд, у меня есть ActionLink, который передает Id в другой вид. Я использовал это несколько раз, но по какой-то причине он не работает на этом ActionLink. Я даже пытался с помощью AJAX POST-вызова в javascript, но без успеха. Я делаю что-то неправильно? Если да, то я не вижу.Html.ActionLink не передает мой id

Контроллер:

Параметр Id в этой функции 0 и должны быть заполнены.

public ActionResult NieuwPriveBericht(int Id) 
    { 
     TblPER_Personeelslid Sender = BCL.GetEmployeeByLoginName(Session["LoginName"].ToString()); 
     TblPER_Personeelslid Receiver = BCL.GetEmployeeById(Id); 

     var Model = new TblALG_PrvBericht(); 
     Model.Datum = DateTime.Now.Date; 
     Model.Zender = Sender.IDPersoneelslid; 
     Model.Ontvanger = Receiver.IDPersoneelslid; 

     ViewBag.ReceiverName = Receiver.Voornaam + " " + Receiver.Naam; 

     return View(Model); 
    } 

public ActionResult PriveBerichten() 
    { 
     ViewBag.SelectedEmployee = ""; 

     var Model = new PriveBerichten(); 
     return View(Model); 
    } 

Вид:

Если отладить мой взгляд, я ясно вижу @ Model.SelectedOption заполненными.

@using (Html.BeginForm("PriveBerichten", "Home", @Model, FormMethod.Post)) 
{ 

@Html.ActionLink("Nieuw bericht maken", "NieuwPriveBericht", new { Id = @Model.SelectedOption }, new { @class = "button-add" }) 
} 

AJAX ВЫЗОВ

$("#DdlEmployees").change(function() { 
    var SelectedEmployee = $('#DdlEmployees option:selected').val(); 
    $.ajax({ 
     type: "POST", 
     url: 'PriveBerichten?SelectedEmployee=' + SelectedEmployee, // this works 
     dataType: "json", 
     data: $('form').serialize(), 
     success: function() { 
      alert("test"); // does not show 
     }, 
     error: function() { 
     } 
    }); 
}) 
+0

Это уже не оригинальный вопрос, вы должны размещать разные вопросы отдельно. – Lin

ответ

1

Если вы не создали идентификатор маршрута "Id", вам нужно использовать "идентификатор". Также удалите «@Model» в BeginForm.

Действие

public ActionResult NieuwPriveBericht(int id) 
    { 
// 
    } 

Вид:

@using (Html.BeginForm("PriveBerichten", "Home", FormMethod.Post)) 
{ 

@Html.ActionLink("Nieuw bericht maken", "NieuwPriveBericht", 
       new { id = @Model.SelectedOption }, new{ @class = "button-add" }) 
} 
+0

В моем маршруте он объявлен как id, но я использую Id в других представлениях, и он работает также. Не имеет значения. И почему я должен удалить @Model? Любые рассуждения? –

+0

Третий параметр должен быть полем object routeValues, я не знаю, почему вы передаете значение модели в это поле. – Lin

+0

Правда. Я использовал его из другого проекта, сделанного кем-то другим. Никогда не обращал на это внимания. –

0

Спасибо за показывая ActionResult, который генерирует вид. Я думаю, что это ваша проблема:

var Model = new PriveBerichten(); 
return View(Model); 

Я полагаю, ваш класс PriveBerichtenSelectedOption содержит свойство? Если вы не измените/не инициализируете это значение свойства в конструкторе PriveBerichten, по умолчанию оно равно 0, и поэтому оно будет равно 0 в вашей actionlink.

+0

Но у меня есть метод AJAX, который запускается, выбирая что-то в раскрывающемся списке, который затем запускает ActionResult, где я возвращаю модель с SelectedOption заполненной. Вы понимаете, что я имею в виду? Итак, да, сначала представление начинает 0, но все в порядке. Мне нужно только заполнить эту должность. Сначала вы должны выбрать пользователя, а затем нажать кнопку, и на этой кнопке необходимо передать значение. –

+0

Ну, нет ничего плохого в вашем ActionLink, и если этот ActionResult возвращает модель с правильными значениями и правым PartialView, остается только то, что вы AJAX-метод не обновляет DOM с новым представлением (которое содержит правильную actionlink) , Вы можете использовать что-то вроде FireBug, чтобы проверить, отправляет ли сервер нужные данные. – Marthijn

+0

То, что я заметил, это POST-сообщение, которое я вижу в FireBug, но страница не обновляется. Это может быть проблема? –

Смежные вопросы