【发布时间】:2015-03-25 13:33:09
【问题描述】:
起初,我对 Web 开发完全陌生。我正在尝试开发一个由单个页面组成的 Web 应用程序(我从一个尝试遵循 mvc 模式的空项目开始)。
为了填充我的视图,我通过 HomeController 将 ViewModel 传递给我的“主页”视图。
现在我想根据下拉选择更改一些标签文本。
视图模型:
public IEnumerable<Models.Language> AvailableLanguages;
public Models.Language SelectedLanguage
Public IEnumerable<Models.Text> Content;
语言:
public int ID;
public string LanguageText;
文字:
public Language Language;
public string Description;
HTML: @model ViewModels.MyViewModel
<div>
@Html.DropDownFor(x => x.AvailableLanguages,
new SelectList(Model.AvailableLanguages,
"ID",
"LanguageText",
new {@onchange= ... }))
</div>
<div>
@{
@:@Model.MyViewModel.Content
.Where(o => o.Language.Equals(Model.SelectedLanguage)
.First())
.Description
}
</div>
我读过一些关于这个“@onchange”属性(Ajax、JQuery)的东西——但老实说,如果有任何 ASP/MVC/HTML 解决方案来实现我的目标,那就太好了——每次都更新我的 SelectedLanguage 属性下拉列表中的选定项目已更改。
另外:有没有web开发(asp、html、ajax、jquery、js)的教程可以推荐?
谢谢!
编辑
现在我尝试实现提供的代码,但更改所选项目时似乎没有任何反应...
脚本:
<div class="LanguageSelection">
@{
@Html.DropDownList("SelectedLanguage", new SelectList(Model.AvailableLanguages, "ID", "Description"))
<script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript">
var url = '@Url.Action("ChangeLanguage", "Home")';
$('#SelectedLanguage').change() {
$.getJSON(url, {
ID: $(this).val()
}, function(response){
$('#Title').text(response.Title);
});
};
</script>
}
</div>
JsonResult:
public JsonResult ChangeLanguage(int id) {
var data = new {
Title = HVM.Title.Where(o => o.Language.ID.Equals(id)).First(),
};
return Json(new { success = true });
}
问题应该在脚本中的某个地方,ChangeLanguage 方法甚至没有被执行。
【问题讨论】:
-
你试过javascript/jquery解决方案了吗?
-
有点不清楚你到底想做什么。您不能将下拉列表绑定到复杂对象 (
IEnumerable<Models.Language>)。如果您想在回发时识别所选语言,则需要绑定一个属性(比如int SelectedLanguage { get; set; }),然后是@Html.DropDownFor(x => x.SelectedLanguage, new SelectList(Model.AvailableLanguages ...)。 -
您的观点的第二部分没有意义。 Razor 代码在发送到视图之前在服务器上进行解析,因此
MyViewModel.Content永远只是SelectedLanguage的初始值。如果您想根据所选语言更新 DOM 中的某些内容,则需要使用 ajax 调用控制器,传递所选语言并返回要显示的新值。另请注意,您的模型只有字段(没有获取/设置),因此当您回发时不会绑定任何内容。 -
这就是为什么我说我是网络开发领域的新手。所以您的意思是如果不使用 ajax 等高级技术,就无法将 SelectedValue 绑定到 List
-
@Chill-X。您可以将下拉列表绑定到值类型(
int、string等),但不能绑定到复杂对象(<select>回发单个值并且不知道IEnumerable<Language>是什么。如果您解释你想做什么(即处理.change事件的目的是什么),我可以给你答案。
标签: c# html asp.net-mvc viewmodel onchange