如何将类的对象而不是字符串值分配到DropDownListFor中?以下是如何工作的例子。
模型:
public class Language
{
public int Id {set; get;}
public string Index {set; get;}
public string Name { set; get;}
}
控制器:
public LanguageController : Controller
{
public ActionResult show( Language lang = null )
{
return View( lang );
}
// i try something like that and dont working,
// that show list of language but razor form call controler method with empty parameter
public static List<SelectListItem> ListOfLanguages()
{
List<SelectListItem> list = new List<SelectListItem>();
foreach ( Language l in _languageRepository.Languages )
{
list.Add( new SelectListItem()
{
Value = l.Index,
Selected = false,
Text = l.Name
});
}
return list;
}
}
视图:
@using( html.beginform( "show", "LanguageController" ) )
{
@Html.DropDownListFor(x => x.Language, ListOfLanguages() )
<input type="submit" >
}
抱歉,但我不知道如何解释
答案 0 :(得分:0)
您只需将项目传递给视图即可。一种方法是使用视图模型。
public class ShowLanguageVm
{
public List<SelectListItem> Languages { set;get;}
public string Language { set;get;}
}
如果您的视图已有视图模型,只需将Languages
属性添加到该视图中。
现在,在您的GET操作中,创建一个此对象,调用您的ListOfLanguages
方法并设置Languages
集合。将视图模型对象传递给视图。
public ACtionResult Show(string Language ="")
{
//to do : Do something with the value of Language if it is not null
var vm=new ShowLanguageVm();
vm.Languages = ListOfLanguages();
return View(vm);
}
在我们的ShowLanguageVm类中强类型的视图中,您可以使用Html.DropDownListFor
辅助方法来呈现语言下拉列表。
@using(Html.BeginForm("Show","Language"))
{
@Html.DropDownListFor(s=>s.Language,Model.Languages)
<input type="submit" />
}
答案 1 :(得分:0)
您的视图无法从控制器访问方法,这是分离MVC的全部想法。
您需要将控制器操作中的<div>
<h2>Bar Graph Example</h2>
<img src="@Url.Action("MyBarGraph")" alt="SimpleChart" />
</div>
传递给支持方法之一的视图:
1-通过强类型模型,就像@Shyju在他的回答中所示
2-通过SelectList
变量,它是一个动态对象,允许您使用名称设置变量并在视图中使用相同的名称,例如:
ViewBag
在你看来:
public LanguageController : Controller
{
public ActionResult show( Language lang = null )
{
ViewBag.LanguageList = ListOfLanguages();
return View( lang );
}
// i try something like that and dont working,
// that show list of language but razor form call controler method with empty parameter
public static List<SelectListItem> ListOfLanguages()
{
List<SelectListItem> list = new List<SelectListItem>();
foreach ( Language l in _languageRepository.Languages )
{
list.Add( new SelectListItem()
{
Value = l.Index,
Selected = false,
Text = l.Name
});
}
return list;
}
}
答案 2 :(得分:0)
我这样做是有效的,下面是解决方案
视图:
@Html.DropDownListFor(x => x.Language.Index, LabelController.ListOfLanguages())
控制器:
public static IEnumerable<SelectListItem> ListOfLanguages()
{
var langs = _languageRepository.Languages.Select( x => new SelectListItem
{
Value = x.Index,
Text = x.Name
});
return new SelectList( langs, "Value", "Text");
}
public ActionResult show( Language lang = null )
{
lang = _languageRepository.Find(x => x.Index == label.Language.Index );
return View( lang );
}