Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用Jquery函数MVC后的Refesh ViewData_C#_Jquery_Asp.net Mvc - Fatal编程技术网

C# 调用Jquery函数MVC后的Refesh ViewData

C# 调用Jquery函数MVC后的Refesh ViewData,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,在dropdownlist值更改后,我必须刷新两个列表框的项目。 列表框的数据在ViewData中,我从jquery函数调用了一个动作控制器,但是调用后的ViewData具有相同的数据 代码如下: $(document).ready( function () { $('#users').change(function () { var selectedValue = $('#users').val(); $.post('@Url.A

在dropdownlist值更改后,我必须刷新两个列表框的项目。 列表框的数据在ViewData中,我从jquery函数调用了一个动作控制器,但是调用后的ViewData具有相同的数据

代码如下:

$(document).ready( function () {
        $('#users').change(function () {
            var selectedValue = $('#users').val();
            $.post('@Url.Action("GruposUsuario", "Grupos")', { usersId: selectedValue }, function () {
                var gruposAsig = JSON.parse('@Html.Raw(Json.Encode(ViewData["gruposAsignados"]))');
                var gruposDisp = JSON.parse('@Html.Raw(Json.Encode(ViewData["gruposDisponibles"]))');
                $('#gruposAsignados').empty();
                $('#gruposAsignados').addItems(gruposAsig);
                $('#gruposDisponibles').empty();
                $('#gruposDisponibles').addItems(gruposDisp);
            });
        });
        $.fn.addItems = function (grupos) {
            return this.each(function () {
                var list = this;

                $.each(grupos, function (index, itemData) {
                    var option = new Option(itemData.Text, itemData.Value);
                    list.add(option);
                });
            });
        };


    });
以及控制器代码:

[HttpPost]
        public ActionResult GruposUsuario(string usersId)
        {
            AllUsers();
            GruposAsignados(int.Parse(usersId));
            //GruposDispobibles(int.Parse(usersId));
            return Json("Usuario");
        }


        void GruposAsignados(int usersId)
        {            
            var grupos  = new BL.Grupos().GruposAsignados(usersId);
            List<SelectListItem> list = new List<SelectListItem>();
            foreach (var grupo in grupos)
            {
                SelectListItem selectList = new SelectListItem()
                {
                    Text = grupo.GroupName,
                    Value = grupo.GroupsId.ToString()
                };
                list.Add(selectList);
            }
            ViewData["gruposAsignados"] = list as IEnumerable<SelectListItem>;
        }
[HttpPost]
public ActionResult GruposUsuario(字符串usersId)
{
诱惑者();
GruposAsignados(int.Parse(usersId));
//gruposdispobiles(int.Parse(usersId));
返回Json(“Usuario”);
}
void GruposAsignados(int usersId)
{            
var grupos=new BL.grupos().GruposAsignados(usersId);
列表=新列表();
foreach(grupos中的变量grupo)
{
SelectListItem selectList=新建SelectListItem()
{
Text=grupo.GroupName,
Value=grupo.GroupsId.ToString()
};
list.Add(选择列表);
}
ViewData[“gruposAsignados”]=列表为IEnumerable;
}

如何在事件发生后引用ViewData?

Razor代码在发送到视图之前在服务器上进行解析。您对
@Html.Raw(…)
的使用为
gruposisig
gruposDisp
分配值,这是
ViewData
属性的初始值(首次呈现页面时检查源代码)

在任何情况下,您的方法
GruposAsignados()
只返回一个值为
“Usuario”
的字符串。如果您想返回json数据来更新两个DropDownList中的选项,那么控制器方法应该是

[HttpGet] // its a GET
public ActionResult GruposUsuario(string usersId)
{
  var gruposAsignados= new BL.Grupos().GruposAsignados(usersId).Select(g => new
  {
    ID = g.grupo.GroupsId;
    Name = g.GroupName;
  }
  var gruposDisponibles = // another query
  return Json(new { Asignados = gruposAsignados, Disponibles = gruposDisponibles, JsonRequestBehavior.AllowGet);
}
var asignados = $('#gruposAsignados'); // cache it
var disponibles = $('#gruposDisponibles');
$.getJSON('@Url.Action("GruposUsuario", "Grupos")', { usersId: selectedValue }, function (response) {
  if(response) {
    asignados.empty();
    // or asignados.empty().append($('</option>').val('').text('-Please select-'));
    $.each(response.Asignados, function(index, item) {
      asignados.append($('</option>').val(item.ID).text(item.Name));
    });
    disponibles.empty();
    $.each(response.Disponibles, function(index, item) {
      disponibles.append($('</option>').val(item.ID).text(item.Name));
    });
  }
});
那么脚本应该是

[HttpGet] // its a GET
public ActionResult GruposUsuario(string usersId)
{
  var gruposAsignados= new BL.Grupos().GruposAsignados(usersId).Select(g => new
  {
    ID = g.grupo.GroupsId;
    Name = g.GroupName;
  }
  var gruposDisponibles = // another query
  return Json(new { Asignados = gruposAsignados, Disponibles = gruposDisponibles, JsonRequestBehavior.AllowGet);
}
var asignados = $('#gruposAsignados'); // cache it
var disponibles = $('#gruposDisponibles');
$.getJSON('@Url.Action("GruposUsuario", "Grupos")', { usersId: selectedValue }, function (response) {
  if(response) {
    asignados.empty();
    // or asignados.empty().append($('</option>').val('').text('-Please select-'));
    $.each(response.Asignados, function(index, item) {
      asignados.append($('</option>').val(item.ID).text(item.Name));
    });
    disponibles.empty();
    $.each(response.Disponibles, function(index, item) {
      disponibles.append($('</option>').val(item.ID).text(item.Name));
    });
  }
});
var asignados=$('gruposAsignados');//缓存它
var disponibles=$(“#gruposDisponibles”);
$.getJSON('@Url.Action(“GruposUsuario”,“Grupos”),{usersId:selectedValue},函数(响应){
如果(答复){
asignados.empty();
//或asignados.empty().append($('').val('').text('-请选择-');
$.each(response.Asignados,函数(索引,项){
append($('').val(item.ID).text(item.Name));
});
disposibles.empty();
$.each(response.disponsibles,函数(索引,项){
append($('').val(item.ID).text(item.Name));
});
}
});

旁注:不需要创建
IEnumerable
。浏览器不知道什么是C#类,而您只返回从未使用过的额外不必要的数据(所选
的值
组的值
禁用的值
属性)。

请注意,该标记用于有关模式的问题,然而,您的问题涉及特定于ASP.NET的实现,您应该使用标记。谢谢您的回答。它的工作,但它没有进入每个循环,我检查数据,它有值。我能为此做些什么?