我的问题分为两部分。
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()
局部视图。
谢谢!
Refreshing MVC PartialView with new Model on DropDownList Change
答案 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 }
);
}
}