本文介绍了从“视图"中的“下拉列表"中选择并传递回控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的模型:
public class UserProfile
{
public Guid ID { get; set; }
public string DisplayName { get; set; }
public Language PreferredLang { get; set; }
}
public class Language
{
[Key]
public int LanguageID { get; set; }
public string LanguageCode { get; set; }
public string DisplayName { get; set; }
}
而且我希望能够从下拉列表中选择首选语言.
And I want to be able to select preferred language from dropdown.
在控制器中,我获取语言列表并将其放在ViewBag中.在视图中,我加载了该列表.然后我要保存选择.
In controller I get list of languages and put it in ViewBag. In view I load this list. Then i want to save selection.
我的控制器:
public ActionResult EditProfile()
{
List<Language> langauges = Logic.GetAllLanguages();
ViewBag.Languages = langauges;
UserProfile profile = GetUserProfile();
return View(profile);
}
我的观点:
@using (Html.BeginForm()) {
@Html.EditorFor(model => model.DisplayName)
<div class="display-field">
@Html.DropDownListFor(x => x.PreferredLang, new SelectList(ViewBag.Languages, "LanguageID", "DisplayName") as SelectList)
</div>
<input type="submit" value="Save" />
}
当用户单击保存"时,传递给控制器的element
对象具有DisplayName
,但PreferredLang
始终为空. 如何将语言传递回控制器?
When user clicks "Save", element
object passed to controller has DisplayName
, but PreferredLang
is always null. How can I pass Language back to controller?
[HttpPost]
public ActionResult EditProfile(UserProfile element)
{
//save element
}
推荐答案
创建具有以下属性的ViewModel:
Create a ViewModel with following properties:
public class UserProfileViewModel
{
public Guid ID { get; set; }
public string DisplayName { get; set; }
public int PreferredLangID { get; set; }
public IEnumerable<Language> PreferredLanguages { get; set; }
}
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.ID)
@Html.EditorFor(model => model.DisplayName)
<div class="display-field">
@Html.DropDownListFor(x => x.PreferredLangID, new SelectList(Model.PreferredLanguages, "LanguageID", "DisplayName"))
</div>
<input type="submit" value="Save" />
}
public ActionResult EditProfile()
{
List<Language> languages = Logic.GetAllLanguages();
UserProfile profile = GetUserProfile();
var viewModel = new UserProfileViewModel
{
ID = profile.ID,
DisplayName = profile.DisplayName,
PreferredLanguages = languages
};
return View(viewModel);
}
[HttpPost]
public ActionResult EditProfile(UserProfileViewModel viewModel)
{
List<Language> languages = Logic.GetAllLanguages();
if(ModelState.IsValid)
{
var userProfile = new UserProfile
{
ID = viewModel.ID,
DisplayName = viewModel.DisplayName,
PreferredLang = languages.FirstOrDefault(l => l.LanguageID == viewModel.PreferredLangID)
};
//save element
}
viewModel.PreferredLanguages = languages;
return View(viewModel);
}
这篇关于从“视图"中的“下拉列表"中选择并传递回控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!