Как я могу заставить этот ASP.NET MVC SelectList работать?

Просто создайте файл .htaccess у root и добавьте в него эти строки

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Вот и все!

Вышеприведенный код работает с корневой папкой public_html. Сказав, что ваш основной файл laravel должен находиться внутри папки public_html, если ваш каталог выглядит как public_html / laravelapp / public, и если вы поместите вышеуказанный код в laravelapp, это не сработает. Поэтому вы должны скопировать все ваши основные файлы в public_html и поместить там файл .htaccess.

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

125
задан C. Ross 18 March 2011 в 12:29
поделиться

12 ответов

Это как я это делаю

IList<Customer> customers = repository.GetAll<Customer>();
IEnumerable<SelectListItem> selectList = 
    from c in customers
    select new SelectListItem
    {
        Selected = (c.CustomerID == invoice.CustomerID),
        Text = c.Name,
        Value = c.CustomerID.ToString()
    };

На второй взгляд, я не уверен, что знаю, что вы после ...

127
ответ дан 24 November 2019 в 00:57
поделиться

Возможно, у вас есть некоторая двусмысленность в ваших ViewData:

Посмотрите Здесь

0
ответ дан 24 November 2019 в 00:57
поделиться

Использование конструктора, который принимает элементов, dataValueField, dataTextField, selectedValue в качестве параметров:

ViewData["myList"] = 
                new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }
                .Select(x => new {value = x, text = x}), 
                "value", "text", "15");

Тогда, на ваш взгляд:

<%=Html.DropDownList("myList") %>
48
ответ дан 24 November 2019 в 00:57
поделиться

Я использую метод расширения:

использование

var departmentItems = departments.ToSelectList(d => d.Code + 
                                               " - " + d.Description,
                                               d => d.Id.ToString(),
                                               " - ");

var functionItems = customerFunctions.ToSelectList(f => f.Description, 
                                                   f => f.Id.ToString(), 
                                                   " - ");

с

public static class MCVExtentions
{
    public static List<SelectListItem> ToSelectList<T>(
        this IEnumerable<T> enumerable, 
        Func<T, string> text, 
        Func<T, string> value, 
        string defaultOption)
    {
        var items = enumerable.Select(f => new SelectListItem()
                                     {
                                         Text = text(f), 
                                         Value = value(f) 
                                     }).ToList();
        items.Insert(0, new SelectListItem()
                    {
                        Text = defaultOption, 
                        Value = "-1" 
                    });
        return items;
    }
}
68
ответ дан 24 November 2019 в 00:57
поделиться

Это вариант:

myViewData.PageOptionsDropDown = new[] 
{
 new SelectListItem { Text = "10", Value = "10" },
 new SelectListItem { Text = "15", Value = "15", Selected = true }
 new SelectListItem { Text = "25", Value = "25" },
 new SelectListItem { Text = "50", Value = "50" },
 new SelectListItem { Text = "100", Value = "100" },
 new SelectListItem { Text = "1000", Value = "1000" },
}
11
ответ дан 24 November 2019 в 00:57
поделиться

На вашем примере это сработало для меня:

контроллер:

ViewData["PageOptionsDropDown"] = new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }, "15");

вид:

<%= Html.DropDownList("PageOptionsDropDown")%>
1
ответ дан 24 November 2019 в 00:57
поделиться

Я просто запустил его вот так, и у меня не было проблем,

public class myViewDataObj
    {
        public SelectList PageOptionsDropDown { get; set; }
    }

public ActionResult About()
        {
            myViewDataObj myViewData = new myViewDataObj();
            myViewData.PageOptionsDropDown =
                  new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }, "15");

            ViewData["myList"] = myViewData.PageOptionsDropDown;
            return View();
        }

и

<%=Html.DropDownList("myList") %>

он также работал, если вы сделали это,

public ActionResult About()
        {
            myViewDataObj myViewData = new myViewDataObj();
            myViewData.PageOptionsDropDown =
                  new SelectList(new[] { "10", "15", "25", "50", "100", "1000" });

            ViewData["myListValues"] = myViewData.PageOptionsDropDown;
            ViewData["myList"] = "15";
            return View();
        }

и

<%=Html.DropDownList("myList",(IEnumerable<SelectListItem>)ViewData["myListValues"]) %>
2
ответ дан 24 November 2019 в 00:57
поделиться

Кажется, если у вас строго типизированное представление, вам нужно изменить идентификатор раскрывающегося списка, чтобы он НЕ был именем свойства в унаследованном классе. Затем вам нужно ввести некоторую логику в свой метод редактирования (POST), чтобы извлечь выбранное значение из FORMCollection и поместить его в свой экземпляр перед фиксацией ваших изменений.

Это, конечно, немного странно, но я попробовал и это работает.

Итак, если у вашего класса есть поле с именем CountryId, скажем, и вы показываете список названий стран, сделайте раскрывающийся список с идентификатором CountryName, а не CountryId, тогда в сообщении вы можете что-то сделать с Коллекция ["CountryName"].

5
ответ дан 24 November 2019 в 00:57
поделиться

Проблема в том, что SelectList работает так, как задумано. Ошибка в дизайне. Вы можете установить свойство Selected в SelectedItem, но это будет полностью проигнорировано, если вы просматриваете список с помощью GetEnumerator () (или если Mvc делает это за вас). Вместо этого Mvc создаст новый SelectListItems.

Вы должны использовать SelectList ctor с SelectListItem [], Text-Name, Value-Name и SelectedValue. Помните, что в качестве SelectedValue следует передавать ЗНАЧЕНИЕ SelectListItem, которое вы хотите выбрать, а не сам SelectListItem! Пример:

SelectList sl = new SelectList( new[]{
  new SelectListItem{ Text="one", Value="1"},
  new SelectListItem{ Text="two", Value="2"},
  new SelectListItem{ Text="three", Value="3"}
}, "Text", "Value", "2" );

(не проверял, но у меня была такая же проблема)

, тогда второй вариант получит атрибут selected = "selected". Это похоже на старые добрые DataSets; -)

13
ответ дан 24 November 2019 в 00:57
поделиться
MonthRepository monthRepository = new MonthRepository();
IQueryable<MonthEntity> entities = monthRepository.GetAllMonth();
List<MonthEntity> monthEntities = new List<MonthEntity>();

foreach(var r in entities)
{
    monthEntities.Add(r);
}

ViewData["Month"] = new SelectList(monthEntities, "MonthID", "Month", "Mars");
1
ответ дан 24 November 2019 в 00:57
поделиться

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

0
ответ дан 24 November 2019 в 00:57
поделиться

Я не могу вспомнить, как был настроен mvc 1, но похоже, что он хотел, чтобы список выбора был таким же, как и поле, которому он принадлежал ...

Я обнаружил, как кто-то вроде как сказал выше, что мои списки выбора не работали в mvc2, когда ViewData, в котором они были отправлены, называлась так же, как поле.

Например:

<% = Html.DropDownListFor ((model => model.ForID), (SelectList) ViewData ["ForName"])%>

работает, когда

<% = Html. DropDownListFor ((model => model.ForID), (SelectList) ViewData ["ForID"])%>

не работает, поскольку имя ViewData "ForID" имеет то же имя, что и поле, для которого оно работает

0
ответ дан 24 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: