2016-12-06 3 views
0

Я думал, что это будет намного проще, чем было. Мне нужно извлечь данные из ячейки в моем datatable (что я могу сделать), а затем отправить его через форму со скрытым полем, чтобы передать переменную в действие в моем контроллере.Формирование формы со скрытым вводом и отправкой на действие

Я делаю что-то похожее на это в моем коде, за исключением создания формы.

Я пробовал разные методы и не имел значения, что, когда я получаю доступ к коллекции в своем действии, значение равно null.

My View Функция:

$('#myTable').on('click', 'td', function() { 
      var serial = table.cell(this).data(); 


      var form = $('<form action="@Url.Action("status")" id="hiddenform"><input type="hidden" id="serial" name="serial" value=""></form>').appendTo('body'); 
      $('.serial').val(serial); 
      form.submit(); 


     }); 

и мой контроллер я разбора:

//Accept GET and POST 
    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 
    public ActionResult Status(System.Web.Mvc.FormCollection collection) 
    { 
     string serial = collection["serial"]; 

     if (serial == null || serial == "") 
      System.Windows.Forms.MessageBox.Show("Error: Serial is NULL"); 

     return View(serial); 
    } 

Чтобы быть честным, я разделывали мой код много в попытке исправить это, так это выглядит довольно ужасно.

Любая помощь будет оценена по достоинству.

Я получаю сообщение об ошибке: Serial NULL появляется каждый раз в моем контроллере. Однако, если я тестирую JQuery, значение не равно null, оно возвращает правильное значение.

+0

'$ Вэл (серийный),' после этого попытаться триггером («последовательный.»). событие изменения, поскольку вы используете значение с помощью кода, а не как пользовательский ввод. '$ ('. serial'). trigger ('change');' – Manish

+0

@Manish Значение после этого не изменяется. –

ответ

1

Вы пытались изменить подпись метода на следующее?

public ActionResult Status(string serial) 

где serial будет именем параметра, которое вы передадите из формы HTML.

Если имя параметра мля в HTML, вы, возможно, придется изменить метод подписи ниже:

public ActionResult Status(string blah) 
0

Ваше скрытое поле имеет имя и идентификатор свойства serial, но селектор jQuery, используемый для назначения значения, ищет класс. Попробуйте # вместо того, чтобы выбрать по ID:

$('#serial').val(serial); 

В качестве альтернативы вы можете использовать JQuery для AJAX POST данные в контроллере:

$.post('@Url.Action("status")', { serial: table.cell(this).data() }); 

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

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Status(string serial) 
{ 
    if (serial == null || serial == "") 
     System.Windows.Forms.MessageBox.Show("Error: Serial is NULL"); 

    return View(serial); 
} 
+0

Здравствуйте, Майк, Извините, это все еще происходит со значением NULL после этого изменения. –

+0

Я бы попробовал три вещи на этом этапе: 1) Использовать средства разработки браузера для проверки сетевого трафика - последовательный параметр отправляется в запросе на форме submit? Имеет ли это значение в этот момент? Если да, то проблема на стороне .NET. Если нет: 2) Поместите контрольную точку или console.log в строку перед вызовом .val(). Имеет ли переменная serial значение? 3) Проверьте $ ('# serial'). Val(); используя console.log сразу после утверждения, но до формы .submit(). Имеет ли это значение? – MikeTV

+0

Использование альтернативного решения звучит неплохо в теории, но после его реализации я получаю ошибку Server 500 при выполнении JQuery. –

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