2015-08-05 2 views
-1

У меня есть элементы управления, которые вставляются из jQuery. Элементы управления могут меняться в зависимости от выбранного вами варианта, т. Е. Они не являются элементами управления, которые были созданы статически, но для анализа jQuery с выбранным вами вариантом. Мой вопрос: можно ли получить доступ к списку контроллеров в HttpPost?Как получить доступ к списку возможных динамических контроллеров в HttpPost?

Это функция, которая выполняется для вставки элементов управления:

function GetProperties() { 
     var subcategory = $("#ddlSubcategory").val(); 
     $.getJSON("/AddAdBox/GetProperties?id=" + subcategory, null, function (data) { 
      $.each(data, function (i, item) { 
       //item.ID // PROPERTY ID 
       //item.NAME //NAME PROPERTY 
       //item.OPTION_PROPERTY[0].ID //ID OPTION ID 
       //item.OPTION_PROPERTY[0].NAME // NAME OPTION 
       //item.OPTION_PROPERTY.length // SI ES 0 ES TXT SINO SELECT 
       var itemlist = ''; 
       //<div class="col-sm-6"> 
       //      <label> 
       //       Título 
       //      </label> 
       //      <input type="text" name="email" class="form-control" placeholder="Título"> 
       //     </div><!-- /.col --> 
       if (item.OPTION_PROPERTY != null) { 
        if (item.OPTION_PROPERTY.length > 0) { 
         itemlist = '<div class="col-sm-6 animated" style="opacity:1;"><label>' + item.NAME + '</label>'; 
         itemlist += '<select id="ddl"' + item.NAME + '">'; 
         for (var i = 0; i < item.OPTION_PROPERTY.length; i++) { 
          itemlist += '<option value="' + item.OPTION_PROPERTY[i].ID + '">' + item.OPTION_PROPERTY[i].NAME + '</option>'; 
         } 
         itemlist += '</selec>'; 
         itemlist += '</div>'; 
        } 
       } 
       else { 
        itemlist = '<div class="col-sm-6 animated" style="opacity:1;"><label>' + item.NAME + '</label>'; 
        itemlist += '<input type="text" name="' + item.NAME + '" class="form-control" placeholder="' + item.NAME + '">'; 
        itemlist += '</div>'; 
       } 
       $("#properties").append(itemlist); 
      }); 
     }); 
    } 
+1

Не уверен, что вы просите; «для доступа к списку контроллеров [s] в HttpPost» подразумевалось бы действие контроллера (на C#), но вы вложили целую кучу того, что кажется несущественным (на этот вопрос) javascript, и вопрос относится к элементам управления и «контроллеры» (который является термином mvc) в вопросе, помеченном asp.net-mvc, которые имеют нулевое отношение друг к другу. Это может быть терминология. Вы имели в виду список элементов управления? В этом случае вы хотите '$ (". Form-control ")' (все элементы управления с классом 'form-control') или '$ (" input ")' (все входы) –

+0

Я хочу получить доступ к списку динамических элементы управления на посту [HttpPost] [ValidateAntiForgeryToken] Índice ActionResult público (string id) {return View(); } –

+0

Предполагая, что они находятся в элементе '

', тогда члены 'HttpContext.Current.Request.Form' предоставят вам все элементы управления. –

ответ

0

Один из способов для привязки данных к контроллеру, от динамических HTML-элементов, является использование пользовательской модели связующего. Например:

В моем контроллере я использую ViewModel:

public class IndexViewModel 
{ 
    public int SelectedItemId { get; set; } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new IndexViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(IndexViewModel viewModel) 
    { 
     return View(viewModel); 
    } 
} 

Я затем создать пользовательскую модель связующий, которая может работать с этой ViewModel:

public class IndexViewModelBinder : DefaultModelBinder 
{ 
    protected override void OnModelUpdated(ControllerContext controllerContext, 
              ModelBindingContext bindingContext) 
    { 
     string[] allKeys = HttpContext.Current.Request.Form.AllKeys; 

     var viewModel = bindingContext.Model as IndexViewModel; 

     viewModel.SelectedItemId = int.Parse(HttpContext.Current.Request.Form[0]); 
    } 
} 

В вашем Global.asax.cs файл, поместите это в Application_Start()

ModelBinders.Binders.Add(typeof(IndexViewModel), new IndexViewModelBinder());

В моем файле зрения у меня есть:

@model SelectListModelBinding.Controllers.IndexViewModel 
@{ 
    ViewBag.Title = "Home Page"; 
} 

@using (Html.BeginForm()) 
{ 
    <div class="col-sm-6 animated" style="opacity:1;"> 
     <label>FooName</label>'; 
     <select name="ddlFooName" id="ddlFooName"> 
      <option value="1">Item 1</option> 
      <option value="2">Item 2</option> 
     </select> 
    </div> 
    <input type="submit" value="Save" /> 
} 

Вы можете притвориться, что <select> была динамически. Теперь, когда я возвращаюсь к контроллеру, выполняется IndexViewModelBinder, и я могу видеть значения, переданные в свойстве Form текущего запроса. Затем я могу выбрать любые данные, которые мне нужны. В моем примере я выбирая id выбранного элемента списка из ddlFooName

Поскольку имена выпадающие будет динамичным, вы, возможно, придется делать некоторые вещи с Form.AllKeys, чтобы выбрать материал, который начинается с «DDL »и используйте этот ключ для получения данных.

+0

Спасибо за ответ, завтра доказывает –

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