Работа с каскадным выпадающим списком и текстовым полем в MVC 2 - PullRequest
0 голосов
/ 29 июня 2011

Я пытаюсь скрыть и показать текстовое поле, используя раскрывающийся список, поэтому, например, когда 0 выбрано из выпадающего списка, текстовое поле не должно отображаться в представлении, но если 1 выбрано из выпадающего списка, одно текстовое поле должно отображаться аналогично для выбранного значения 2, должно отображаться два поля, а затем я хочу передать выбранное значение и текстовое поле в http [post] в действии контроллера, чтобы выполнить некоторые вычисления. Я могу сделать все это в веб-формах, но я не знаю, как добиться этого в MVC 2, я могу передать значение из представления в контроллер с помощью коллекции форм, но как я передам значение раскрывающегося списка. Любые примеры или предложения будут оценены.

Ответы [ 2 ]

1 голос
/ 29 июня 2011

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

Как всегда, начните с модели представления:

public class MyViewModel
{
    public string[] Values { get; set; }
    public int SelectedItem { get; set; }
    public IEnumerable<SelectListItem> Items
    {
        get
        {
            return Enumerable.Range(0, 4).Select(x => new SelectListItem
            {
                Value = x.ToString(),
                Text = x + " Item(s)"
            });
        }
    }
}

затем контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            SelectedItem = 2,
            Values = new[] { "", "" }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        // Here you will get the model properly initialized
        return View(model);
    }
}

и, наконец, вид:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <title>Index</title>
    <script type="text/javascript" src="<%: Url.Content("~/scripts/jquery-1.5.1.js") %>"></script>
    <script type="text/javascript">
        $(function () {
            $('#SelectedItem').change(function () {
                var count = parseInt($(this).val(), 10);
                if (count == 0) {
                    $('#values').html('');
                    return;
                }

                for (var i = 0; i < count; i++) {
                    var item = $(':text[name="Values[' + i + ']"]');
                    if (item.length < 1) {
                        $('#values').append(
                            $('<div/>').html(
                                $('<input/>', {
                                    type: 'text',
                                    'data-index': i,
                                    name: 'Values[' + i + ']',
                                    value: ''
                                })
                            )
                        );
                    }
                }

                $('#values :text').each(function (index, element) {
                    if (index >= count) {
                        $(element).parent('div').remove();
                    }
                });

            });
        });
    </script>
</head>
<body>
    <div>
        <% using (Html.BeginForm()) { %>
            <%= Html.DropDownListFor(
                x => x.SelectedItem, 
                new SelectList(Model.Items, "Value", "Text")
            ) %>

            <div id="values">
                <% for (int i = 0; i < Model.Values.Length; i++) { %>
                    <div>
                        <%= Html.EditorFor(x => x.Values[i]) %>
                    </div>
                <% } %>
            </div>

            <input type="submit" value="OK" />
        <% } %>
    </div>
</body>
</html>
1 голос
/ 29 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...