将参数传递给不同视图之间的显示模板
Posted
技术标签:
【中文标题】将参数传递给不同视图之间的显示模板【英文标题】:Passing parameter to displaytemplate between different views 【发布时间】:2021-01-20 02:48:58 【问题描述】:我有几个不同视图模型的视图。
每个视图都有“ProjectId”下拉列表,我想在提交之前在“ProjectId”下拉列表旁边显示所选项目的开始日期。
“ProjectId”下拉列表是一个 ViewBag。
除了为每个视图模型添加开始日期之外,还有其他方法吗?
查看:
<div class="form-inline">
Project:
<div>
@html.DropDownList("ProjectId", new SelectList(ViewBag.ProjectsDropDownList, "Value", "Text"))
</div>
</div>
【问题讨论】:
向我们展示您尝试过的代码。 在用户选择项目后,您可以使用 AJAX 从服务器获取项目的开始日期。或者将开始日期作为选项的数据属性放在下拉列表中,并在选择时使用 javascript 显示它。或将其放入视图模型中。或者在 viewbag 中的单独字典中。很多方法。可能还有一些我还没有想到的。发挥你的想象力。 @ADyson 我知道我可以使用 AJAX 来获取日期,但也意味着所有视图都必须添加 AJAX,后来我发现 displaytemplate 这种方式可以调用相同的模板来呈现 html,但我没有'不知道如何传递参数和使用不同的视图模型。 使用viewbag保存日期可能会更好,这样您就不必担心具体的型号。 【参考方案1】:如果不提供代码,很难回答你,但我看过 https://www.tutorialsteacher.com/mvc/viewbag-in-asp.net-mvc关于viewbags,欢迎大家看看。
这表明你可以简单地在前端使用带有类似这样的标签:
<label>Project Start Date:</label> @ViewBag.projectStartDate
如果您使用 ASP.NET 或 HTML 进行客户端编码
在后端是这样的:
namespace MVC_BasicTutorials.Controllers
public class ProjectController : Controller
string projectName;
int projectId;
string projectDate;
public ProjectController ()
projectName = "new project";
projectId = 0;
projectDate = "01-01-1990";
public ActionResult returnDate()
ViewBag.projectStartDate = this.projectDate;
return View();
【讨论】:
如果 http 方法是 GET,projectId 将为 0。【参考方案2】:我最后使用的方法:
项目控制器:
public PartialViewResult ProjectDate(int projectId)
// get project start date
ViewBag.StartDate = startDate;
return PartialView("_ProjectDate");
_ProjectDate.cshtml:
// use ViewBag.StartDate to render html what I want
get_start_date.js
$(document).ready(function ()
var projectId = $('#ProjectId').val();
if (projectId != undefined)
$.ajax(
url: '/Projects/GetProjectDate',
data: ProjectId: projectId ,
success: function (result)
$("#project_date").html(result);
);
);
_Layout.cshtml 导入get_start_date.js,并在我需要的页面中插入这段代码:
<div id="project_date"></div>
【讨论】:
以上是关于将参数传递给不同视图之间的显示模板的主要内容,如果未能解决你的问题,请参考以下文章
使用django模板将参数传递给页面上的Javascript代码?