【问题标题】: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保存日期可能会更好,这样您就不必担心具体的型号。

标签: c# html model-view-controller razor asp.net-mvc-5


【解决方案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>

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2011-02-20
    • 2015-09-22
    • 2011-06-27
    相关资源
    最近更新 更多