Просто создайте файл .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.
Если вы хотите сохранить код в подкаталоге, вы можете создать субдомен, тогда этот код также будет работать для этого.
Это как я это делаю
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()
};
На второй взгляд, я не уверен, что знаю, что вы после ...
Возможно, у вас есть некоторая двусмысленность в ваших ViewData:
Посмотрите Здесь
Использование конструктора, который принимает элементов, 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") %>
Я использую метод расширения:
использование
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;
}
}
Это вариант:
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" },
}
На вашем примере это сработало для меня:
контроллер:
ViewData["PageOptionsDropDown"] = new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }, "15");
вид:
<%= Html.DropDownList("PageOptionsDropDown")%>
Я просто запустил его вот так, и у меня не было проблем,
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"]) %>
Кажется, если у вас строго типизированное представление, вам нужно изменить идентификатор раскрывающегося списка, чтобы он НЕ был именем свойства в унаследованном классе. Затем вам нужно ввести некоторую логику в свой метод редактирования (POST), чтобы извлечь выбранное значение из FORMCollection и поместить его в свой экземпляр перед фиксацией ваших изменений.
Это, конечно, немного странно, но я попробовал и это работает.
Итак, если у вашего класса есть поле с именем CountryId, скажем, и вы показываете список названий стран, сделайте раскрывающийся список с идентификатором CountryName, а не CountryId, тогда в сообщении вы можете что-то сделать с Коллекция ["CountryName"].
Проблема в том, что 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; -)
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");
значение, выбранное в модели, используется вместо элемента по умолчанию. (согласен, я не прочитал все сообщения)
Я не могу вспомнить, как был настроен mvc 1, но похоже, что он хотел, чтобы список выбора был таким же, как и поле, которому он принадлежал ...
Я обнаружил, как кто-то вроде как сказал выше, что мои списки выбора не работали в mvc2, когда ViewData, в котором они были отправлены, называлась так же, как поле.
Например:
<% = Html.DropDownListFor ((model => model.ForID), (SelectList) ViewData ["ForName"])%>
работает, когда
<% = Html. DropDownListFor ((model => model.ForID), (SelectList) ViewData ["ForID"])%>
не работает, поскольку имя ViewData "ForID" имеет то же имя, что и поле, для которого оно работает