gpt4 book ai didi

c# - ASP.Net MVC Update ViewModel on DropDown Selection changed

转载 作者:太空狗 更新时间:2023-10-29 15:44:55 26 4
gpt4 key购买 nike

起初我对网络开发完全陌生。我正在尝试开发一个由单个页面组成的 Web 应用程序(我从一个试图遵循 mvc 模式的空项目开始)。

为了填充我的 View ,我通过 HomeController 将 ViewModel 传递到我的“Home” View 。

现在我想根据 DropDown 选择更改一些标签文本。

View 模型:

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>

Json结果:

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 方法甚至没有执行。

最佳答案

从评论中,您希望能够根据所选语言更新标签。为此,您需要使用 ajax 将所选语言发布到返回 json 并更新 DOM 的 Controller 方法。你的 View 模型应该是

public SelectList AvailableLanguages { get; set; }
public int SelectedLanguage { get; set; }

在 Controller 中

public ActionResult YourMethod()
{
var model = new yourModel();
model.SelectedLanguage = // set this if you want a default
var availableLanguages = // get you list of languages
model.AvailableLanguages = new SelectList(availableLanguages, "ID", "LanguageText")
return View(model);
}

查看

@Html.DropDownListFor(m => m.SelectedLanguage, Model.AvailableLanguages)

<script>
var url = '@Url.Action("GetLanguageLabels", "yourControllerName")';
$('#SelectedLanguage').change() {
$.getJSON(url, { ID: $(this).val() }, function(response) {
// Note you will need to give your labels an id attribute
$('#Label1').text(response.Label1);
$('#Label2').text(response.Label2);
})
});
</script>

以及根据所选语言获取标签的方法

public JsonResult GetLanguageLabels(int ID)
{
// Build a object of label values based on the selected language ID
var data = new
{
Label1 = someValue,
Label2 = anotherValue,
....
};
return Json(data, JsonRequestBehavior.AllowGet);
}

旁注:您当前的代码存在一些问题。 (1) 您的模型只有字段,没有属性(没有获取/设置),因此回发时不会绑定(bind)任何内容。 (2) 不能将 html 控件绑定(bind)到复杂对象(只能是值类型,或者在 <select multiple> 的情况下,是值类型数组)。

关于c# - ASP.Net MVC Update ViewModel on DropDown Selection changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29257173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com