ASP.Net MVC 更新下拉选择上的 ViewModel 已更改

2023-11-30

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

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

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

视图模型:

public IEnumerable<Models.Language> AvailableLanguages;
public Models.Language SelectedLanguage
Public IEnumerable<Models.Text> Content;

语言:

public int ID;
public string LanguageText;

Text:

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)教程?

Thanx!

EDIT

现在我尝试实现提供的代码,但更改所选项目时似乎没有任何反应......

Script:

<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 的控制器方法。你的视图模型应该是

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

并在控制器中

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);
}

View

@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) 您的模型只有字段,没有属性(没有获取/设置),因此回发时不会绑定任何内容。 (2) 不能将 html 控件绑定到复杂对象(仅限值类型,或者在<select multiple>,值类型的数组)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.Net MVC 更新下拉选择上的 ViewModel 已更改 的相关文章

随机推荐

  • Python URL 匹配(正则表达式)

    我尝试匹配下面的 URL 几个小时 但似乎无法弄清楚 我很确定它并不那么困难 网址可以是这样的 course lesson one 或者也可以是 course lesson one chapter one 我所拥有的是与第二个 URL 匹配
  • 检查数组中是否存在多个变量之一

    array a b c d vars a f g foreach vars as var if in array var array return true else return false 我如何检查是否其中之一 vars存在于 arr
  • C#中如何将字符串转换为整数

    在 C 中如何将字符串转换为整数 如果您确定它会正确解析 请使用 int Parse string 如果你不是 请使用 int i bool success int TryParse string out i Caution 在下面的例子中
  • 在多线程 Java 应用程序中调用已编译的 m 文件(.jar)时出错

    我有一个简单的m文件 function fRate Height Width media filename obj mmreader filename fRate obj FrameRate Width obj Width Height o
  • 在没有 NodeJS 的情况下使用 EJS

    我认为最新的构建版本将允许我在不使用 Node 的情况下全局使用 ejs 所以我尝试这样做 不过 当我尝试使用 ejs renderFile params 时 我收到错误 TypeError exports fileLoader is no
  • $http 问题 - 在 md-autocomplete Angular Material 中解决承诺之前无法返回值

    我正在使用角度材质md autocomplete在我的项目中 我通过 ajax 调用从服务主机获取建议列表 http服务 Issue http 问题 在承诺之前无法返回值 解决于md autocomplete角材料 我的要求 我需要使用远程
  • WPF 中的高性能绘图控制

    我正在做一些工作 我需要开发一个控件 它应该是一个简单的图表 显示几个点和两条边 我的问题是我需要显示最多 16k 点 更新率为 30 Hz 有没有人做过类似的事情 有什么建议吗 例如 是否从 FrameworkElement 或 Cont
  • Swift:泛型重载,“更专业”的定义

    在下面的例子中 为什么foo f 叫暧昧 我知道第二个重载也可以适用P 但为什么第一个不被认为更专业 因此是更好的匹配 func foo
  • 为什么原来的任务在继续其他任务时被取消了?

    自从我投入 C 编程以来已经 4 周了 确实很有趣 但是 我感到很痛苦 当我开始任务时HttpClient PostAsync 单独使用 效果很好 但如果我继续做其他事情 原来的任务将被取消 而不是由我取消 看起来该任务对继续进行并不满意
  • PHP - 间接修改重载属性

    我知道这个问题已经被问过好几次了 但他们都没有提供解决方法的真正答案 也许有一个适合我的具体情况 我正在构建一个使用魔术方法的映射器类 get 延迟加载其他对象 它看起来像这样 public function get index if is
  • 使用数组过滤对象数组,无需嵌套循环js

    我一直在试图找出在不使用嵌套循环的情况下过滤对象数组的最干净的方法 我找到了这个post using filter关于使用另一个数组过滤数组的函数 但我无法弄清楚如何使用相同的模式实际访问对象数组中的对象内的正确键 给定以下对象数组 tec
  • Kendo UI 重新加载树视图

    我通过 ajax 使用 kendo ui 加载一个复杂的树视图 因为我需要通过一个请求加载树 工作正常 document ready function buildTree function buildTree getJSON admin g
  • 使用 jQuery 延迟更改 insideHTML 文本

    所以我有一个非常简单的按钮 基本上可以打开和关闭表单 我们将在我们的网站上使用它 因为我们正在进行更新并希望在任何页面上提供反馈 这是我迄今为止拥有的 jQuery
  • 具有不同时间戳的重复条目

    我有一个按姓名列出的客户表 Customer SCD在 SQL 中 我其中有 3 列 Customer Name Customer ID Customer TimeStamp 该表中存在不同的重复条目时间戳 例如 ABC 1 2012 12
  • 如何在 ggplot2 中绘制(复杂的)堆叠条形图,无需复杂的手动数据聚合

    我想绘制一个 多面的 堆叠条形图 其中 X 轴以百分比表示 频率标签也显示在条中 经过相当多的工作并查看了 stackoverflow 上的许多不同问题后 我找到了如何使用 ggplot2 解决此问题的解决方案 但是 我不直接使用 ggpl
  • 多维数组转 CSV

    我得到这个数组 array cat gt array 0 gt array name gt Sales url gt http videos volkswagen nl videos videos subs gt array 0 gt ar
  • jQuery toggle() 方法的最佳替代方法?

    jQuery 不推荐使用toggle 方法 这是一种很容易切换类的方法 在搜索 stackoverflow 时 我发现了各种其他方法来完成相同的任务 支持 eventData 的 jQuery toggle 方法的替代方法 哪个 jQuer
  • 为什么在 char 变量中存储 255 在 C 中其值为 -1?

    我正在看一本C书 作者提到了一段文字 if ch a char variable is a signed type then storing 255 in the ch variable gives it the value 1 谁能详细说
  • UTC 时间重置为 2000-01-01 (ruby)。如何防止时间重置?

    我正在使用任务和电子表格 gem 将 Excel 电子表格读入我的数据库 我正在阅读的专栏之一是 start time 为此 我将形成一个值数组 然后逐一传入每个数组值 cnum array for start times sheet1 e
  • ASP.Net MVC 更新下拉选择上的 ViewModel 已更改

    起初我对网络开发完全是新手 我正在尝试开发一个由单个页面组成的 Web 应用程序 我从一个空项目开始尝试遵循 mvc 模式 为了填充我的视图 我通过我的 HomeController 将 ViewModel 传递到我的 Home 视图 现在