2013-11-17 1 views
0

У меня есть следующие данные в моем проектеКак получить элементы DropDownList при отправке?

МОДЕЛЬ

public class AnimalModels 
    { 
    public string AnimalId { get; set; } 
    public List<SelectListItem> AnimalList { get; set; } 
    } 

VIEW

@model DropDownList.Models.AnimalModels 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<script src="@Url.Content("~/Scripts/Animal/Index.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <div> 
    <fieldset> 
     <div>@Html.LabelFor(model => model.AnimalId)</div> 
     <div>@Html.DropDownListFor(model => model.AnimalId, Model.AnimalList)</div> 
     <div>@Html.ValidationMessageFor(model => model.AnimalId)</div> 
    </fieldset> 
    <input type="submit" name="Submit" value="Submit" /> 
    </div> 
} 

CONTROLLER

public class AnimalController : Controller 
    { 
    // 
    // GET: /Animal/ 

    public ActionResult Index() 
    { 
     AnimalModels model = new AnimalModels(); 
     model.AnimalList = new List<SelectListItem>(); 
     return View(model); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(AnimalModels model) 
    { 
     //TODO: get animal list 
     model.AnimalList = new List<SelectListItem>(); 
     return View(model); 
    } 

    } 

index.js

//[B]Document ready 
$(document).ready(function() { 
    //Populate ddl using ajax (jquery) 
    $.ajax({ 
    url: 'Resources/Animals.xml', // name of file with our data - link has been renamed 
    dataType: 'xml', // type of file we will be reading 
    success: parse,  // name of function to call when done reading file 
    error: showError // name of function to call when failed to read 
    }); 

}); 
//[E]Document ready 

function parse(xmlDoc) { 
    var options = new Array(); 
    $(xmlDoc).find("ITEMS").each(function() { 
    $(this).find("ITEM").each(function() { 
     var optionValue = $(this).find('VALUE').text(); 
     var optionLabel = $(this).find('TEXT').text(); 
     options.push('<option value="' + optionValue + '">' + optionLabel + '</option>'); 
    }); 
    }); 
    options = options.join(''); 
    $('#AnimalId').append(options); 
} 

var showError = function (xhr, status, err) { 
    alert("Error loading file Animals.xml in Resources folder.\n" + xhr.status + " " + err + "."); 
}; 

Animals.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<ITEMS> 
    <ITEM> 
     <VALUE>-1</VALUE> 
     <TEXT></TEXT> 
    </ITEM> 
    <ITEM> 
     <VALUE>0</VALUE> 
     <TEXT>Tiger</TEXT> 
    </ITEM> 
    <ITEM> 
     <VALUE>1</VALUE> 
     <TEXT>Lion</TEXT> 
    </ITEM> 
</ITEMS> 

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

enter image description here

+0

Как я понимаю, вы заполнить выпадающую коллекцию пунктов на стороне клиента и хочу получить его обратно на стороне сервера после отправки ? В этом случае ответ - нет, вы не можете этого сделать. Dropdownlist (фактически элемент HTML SELECT) отправляет на сервер только значение выбранного элемента. –

+0

Что я должен изменить, чтобы получить все элементы ddl? не могли бы вы привести мне пример? – CodeGhoib

+0

Почему вы не загружаете элементы DDL на стороне сервера? AnimalModels model = new AnimalModels(); model.AnimalList = GetItemsFromResource(); –

ответ

0

добавить в форму - раствор

@for (int i = 0; i < Model.AnimalList.Count; i++) 
{ 
    @Html.HiddenFor(model=>model.AnimalList[i].Value) 
    @Html.HiddenFor(model=>model.AnimalList[i].Text) 
} 
+0

эй! это делает трюк! Большое спасибо! – CodeGhoib

+0

Я уже обновляю код (находящийся под этим ответом), если у кого-то есть те же проблемы. надеюсь, что может помочь! – CodeGhoib

0

Код предложенному https://stackoverflow.com/users/2984635/user2984635

модель, index.js (неиспользованная), Animal.xml (unused) остается неизменным.

Просмотр и код контроллера обновляются. ниже являются обновления:

VIEW

@model DropDownList.Models.AnimalModels 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

@*<script src="@Url.Content("~/Scripts/Animal/Index.js")" type="text/javascript"></script>*@ 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <div> 
    <fieldset> 
     <div>@Html.LabelFor(model => model.AnimalId)</div> 
     <div>@Html.DropDownListFor(model => model.AnimalId, Model.AnimalList)</div> 
     <div>@Html.ValidationMessageFor(model => model.AnimalId)</div> 
     //[B]the update 
     @for (int i = 0; i < Model.AnimalList.Count; i++) 
     { 
      @Html.HiddenFor(model=>model.AnimalList[i].Value) 
      @Html.HiddenFor(model=>model.AnimalList[i].Text) 
     } 
     //[E]the update 
    </fieldset> 
    <input type="submit" name="Submit" value="Submit" /> 
    </div> 
} 

CONTROLLER

public class AnimalController : Controller 
    { 
     // 
     // GET: /Animal/ 

     public ActionResult Index() 
     { 
      AnimalModels model = new AnimalModels(); 
      model = new AnimalModels(); 
      //[B]the update 
      model.AnimalList = new List<SelectListItem>(); 
      model.AnimalList.Add(new SelectListItem { Value = "0", Text = "Tiger" }); 
      model.AnimalList.Add(new SelectListItem { Value = "1", Text = "Lion" }); 
      //[E]the update 
      return View(model); 
     } 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Index(AnimalModels model) 
     { 
      //[B]the update 
      model.AnimalList[int.Parse(model.AnimalId)].Selected = true; 
      //[E]the update 
      return View(model); 
     } 

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