将参数传递给不同视图之间的显示模板

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>

【讨论】:

以上是关于将参数传递给不同视图之间的显示模板的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给视图转换

Objective-c 将参数传递给视图

使用django模板将参数传递给页面上的Javascript代码?

如何将参数传递给配置单元视图,以便视图根据传递的内容进行更改?

将模板参数传递给调用成员函数的函数

如何将 url 参数传递给视图以供其他类函数和模板使用