从视图传递DropDown字符串到Controller方法

时间:2019-07-18 20:37:43

标签: javascript c# ajax asp.net-mvc razor

我的问题分为两部分。

1) 我试图通过ajax调用将索引视图中的字符串传递到方法(UpdateView(string selectProductionLine))中。我可以通过ajax调用来调用该方法,但是我无法使字符串为空以外的任何内容。

2) 调用此方法(UpdateView(string selectProductionLine)之后,我希望它更新模型,然后使用该更新的方法调用局部视图。目前,我无法调用该局部视图。

我一直在研究几种不同的尝试,下面提供了链接,但无法使它正常工作。我的JS并不是很好,我仍然是一个初学者,并且在合并他人所做的事情时遇到了麻烦。

索引视图:

@(Html.Kendo().DropDownList()
      .Name("productionLine-dropdown")
      .DataTextField("Name")
      .DataValueField("Id")
      .DataSource(source =>
      {
           source.Read(read => { read.Action("GetDropDownList", "Home"); });
      })
      .Events(e =>
      {
           e.Close("OnClose");
      })
)
<div id="Dashboard">
@Html.Partial("~/Views/Home/_Home.cshtml", Model)
</div>

Java脚本:

function OnClose() {
    var selectProductionLine = $("#productionLine-dropdown").data("kendoDropDownList").value();
    $("#Dashboard").load('/Home/UpdateView', selectProductionLine);
}

function DropDownValue() {
    var value = $("#productionLine-dropdown").data("kendoDropDownList").value();
    return { selectProductionLine: value };
}

控制器:

public ActionResult _Home(DisplayViewModel dvm)
{
    return PartialView(dvm);
}

public ActionResult UpdateView(string selectProductionLine)
{
    DisplayViewModel dvm = new DisplayViewModel();
    //Some logic
    return PartialView("~/Home/_Home.cshtml", dvm);
}

问题:

1)将索引中的字符串传递到UpdateView()方法中。

2)使用新的ViewModel从_Home调用UpdateView()局部视图。

谢谢!

Updating PartialView mvc 4

Refreshing MVC PartialView with new Model on DropDownList Change

Passing a List/model from a View to a controller

https://cmatskas.com/update-an-mvc-partial-view-with-ajax/

1 个答案:

答案 0 :(得分:1)

好的,这里有两个问题。

JavaScript

首先,更改您的.Load方法,以将selecProductionLine值简单地连接到URL的末尾。

var selectProductionLine = $("#productionLine-dropdown").data("kendoDropDownList").value();
$("#Dashboard").load("/Home/UpdateView/" + selectProductionLine);

控制器操作

第二,您需要像这样更改UpdateView函数以获取ID。

public ActionResult UpdateView(string Id)
{
    DisplayViewModel dvm = new DisplayViewModel();
    ProductionLine pl = _productionLineService.Find(Id);
    dvm.ProdLine = new ProductionLineViewModel
    {
        Id = pl.Id,
        CreatedAt = pl.CreatedAt,
        Name = pl.Name,
        ActiveLine = pl.ActiveLine,
        ComputerName = pl.ComputerName,
        UPE = pl.UPE
   };
   return PartialView("~/Home/_Home.cshtml", dvm);
}

这是因为RouteConfig.cs中的默认路由使用{controller} / {action} / {id}作为所有请求的默认路由。

RouteConfig

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}