【问题标题】:Passing a DropDown string from a View to a Controller method将 DropDown 字符串从视图传递到控制器方法
【发布时间】:2019-11-27 20:23:34
【问题描述】:

我的问题是一个两部分的问题。

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 从 UpdateView() 调用 _Home 部分视图。

谢谢!

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/

【问题讨论】:

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


    【解决方案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} 作为任何请求的默认路由。

    路由配置

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

    【讨论】:

    • 感谢您的帮助,我编辑了您的回复以匹配对我有用的内容。它非常接近并引导我朝着正确的方向前进。
    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多