C# 在MVC5Razor中,如何将与返回的模型不同的模型传递给控制器?
我有一个带有3个图表的cshtml页面。为了生成图表的数据,我有3种不同的方法,但它们都采用相同的参数。因此,我创建了以下模型C# 在MVC5Razor中,如何将与返回的模型不同的模型传递给控制器?,c#,razor,asp.net-mvc-5,models,C#,Razor,Asp.net Mvc 5,Models,我有一个带有3个图表的cshtml页面。为了生成图表的数据,我有3种不同的方法,但它们都采用相同的参数。因此,我创建了以下模型 public class ChartParameterModel { [Required] public String BankID { get; set; } [Required] public String CompanyID { get; set; } [Required] public DateTime Sta
public class ChartParameterModel
{
[Required]
public String BankID { get; set; }
[Required]
public String CompanyID { get; set; }
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
public Boolean PercentByItemCount { get; set; }
}
“我的页面”的控制器具有以下操作:
public ActionResult GetCharts(ChartParameterModel model)
{
return View(ChartDataController.GetChartData(model.BankID, model.CompanyID, model.StartDate, model.EndDate, model.PercentByItemCount));
}
在cshtml页面中,似乎只能有一个模型。所以我不知道如何传递ChartParameter模型,比如说点击一个按钮,然后返回我的图表数据
如果我硬编码ChartParameterModel,它工作正常。只需要从cshtml中获取值就可以了
谢谢
编辑:
以下是视图:
@model IEnumerable<IEnumerable<SeriesDataItem>>
@{
ViewBag.Title = "Dashboard Home";
}
<div class="chart-wrapper">
@(Html.Kendo().Chart(Model.First())
.Name("chtItemsByType")
.Title(title => title
.Text("Items By Type")
.Position(ChartTitlePosition.Top)
)
.Legend(legend => legend
.Position(ChartLegendPosition.Left)
)
.Series(series =>
{
series.Pie(
model => model.ItemCount,
model => model.ItemType,
null,
model => model.Exploded
)
.Labels(labels => labels
.Visible(true)
.Template("#= dataItem.ItemCount#")
)
.Tooltip(tooltip => tooltip
.Visible(true)
.Template("#= dataItem.ItemAmountDisplay# #= dataItem.YValue# %")
);
})
.Theme("Bootstrap")
.HtmlAttributes(new { style = "height:100%;" })
)
</div>
@model IEnumerable
@{
ViewBag.Title=“仪表板主页”;
}
@(Html.Kendo().Chart(Model.First())
.Name(“chtItemsByType”)
.Title(Title=>Title
.文本(“按类型列出的项目”)
.位置(图表标题位置.顶部)
)
.Legend(Legend=>Legend
.位置(ChartLegendPosition.左)
)
.系列(系列=>
{
系列,派(
model=>model.ItemCount,
model=>model.ItemType,
无效的
model=>model
)
.标签(标签=>标签
.可见(真实)
.Template(“#=dataItem.ItemCount#”)
)
.工具提示(工具提示=>工具提示
.可见(真实)
.Template(“#=dataItem.ItemAmountDisplay##=dataItem.YValue#%”)
);
})
.主题(“引导”)
.HtmlAttributes(新的{style=“height:100%;”})
)
Cef,
是的,视图模型可以根据需要而有所不同。i、 e.您可以定义“动态”类型的模型
因此,可以有多个操作方法针对相同的视图但不同的模型
此外,如果您的模型的所有属性对于所有操作都相同,但对于某些属性不同,则可以包含“dynamic”类型的其他属性,这些属性将接受运行时确定的数据
此外,如果所有操作都要求所有属性相同,但只有一些附加值不同,则可以保持视图模型相同,但不同的属性可以作为ViewBag值传递。这里有一种方法:
$.ajax({
url: '@Url.Action("GetCharts", "Dashboard")',
type: 'POST',
dataType: 'json',
cache: false,
data: {
BankID: "48",
CompanyID: "0",
StartDate: "1/1/2001",
EndDate: "2/2/2002",
PercentByItemCount: false
},
});
然后,视图引用的模型应该无关紧要。很难理解您的问题是什么。如果有基于模型的视图,则模型的属性将发送到控制器。显示您的视图。也许我必须将参数作为系列数据的一部分包括在内?或者在那个模型中的某个地方?在你编辑之前,你认为有谁会知道你在使用
Kendo.Chart
?如果需要在视图中使用IEnumerable
和ChartParameterModel
,请使用包含两个属性的视图模型,每个属性对应一个模型。我认为图表没有那么重要,因为我的问题是更一般的“如何传递与视图中使用的模型不同的模型”,而不管我使用的是什么控件。@Cef对于什么模型操作接受为参数以及它返回什么模型,绝对没有要求。。。它主要取决于您在视图中呈现什么或在JavaScript中运行什么来调用操作。