Может ли значение скрытых переменных быть доступным в контроллере в MVC - PullRequest
0 голосов
/ 23 июня 2010

можем ли мы получить доступ к значениям скрытых переменных в ActionResult контроллера, если значение скрытой переменной установлено в javascript?

Ответы [ 2 ]

3 голосов
/ 23 июня 2010

Когда вы публикуете данные в Controller, все содержимое формы (включая скрытые поля) может быть опубликовано. Назначение скрытого поля - скрыть его в клиенте, а не когда данные отправляются на сервер. Данные формы упаковываются в POST и отправляются на сервер, независимо от того, как они заполнены, поэтому вы можете использовать JQuery для заполнения полей просто отлично ...

Учитывая эту форму:

<% Html.BeginForm(); %>
  <input type="hidden" id="catID" name="catID" />
<% Html.EndForm(); %>

Вы можете обработать его как параметр маршрута:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(string catID)
{
  // Do stuff here...
}

Или, как элемент экземпляра FormCollection:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(FormCollection form)
{
  string catID = form["catID"];

  // Do stuff here...
}

Или даже как модель ввода:

public class MyInputModel
{
  public string catID;
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(MyInputModel input)
{
  string catID = input.catID;

  // Do stuff here...
}
1 голос
/ 23 июня 2010

Если вы имеете в виду ASP.NET MVC, а упомянутая вами скрытая переменная на самом деле является скрытым полем в форме, отправляемой на контроллер, то ответ - да.

Эточастая картина в приложениях, которые я пишу.Скажем, например, что вы редактируете детали человека.Форма, которую вы заполняете, будет содержать видимые поля для таких вещей, как имя, возраст и т. Д., Но также должна иметь скрытое поле, содержащее идентификатор человека, для которого вы редактируете данные.это тип сценария, который вы используете, тогда скрытое поле доступно для контроллера так же, как поля name и age.

EDIT: В дополнение к вашему последующему комментарию, похоже, что выссылаясь на переменные JavaScript.Если это так, то они не доступны для контроллера напрямую - но это можно организовать, вставив переменную (и) в форму.

//Javaacript
var myVariable = calculateSomeValue();
$("#myFormField").val(myVariable);
...
//HTML
<form action="..." method="post">
    <input type="hidden" name="myFormField" id="myFormField"/>
    ...
</form>
...
//Controller code
ActionResult MyControllerAction(string myFormField, ...){
    DoSomethingWith(myFormField);
}

Если это не поможет,Вы можете опубликовать пример кода?

...