Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC使用不同的控制器和模型共享局部视图_C#_Asp.net Mvc_Asp.net Mvc 4_Controller_Partial Views - Fatal编程技术网

C# MVC使用不同的控制器和模型共享局部视图

C# MVC使用不同的控制器和模型共享局部视图,c#,asp.net-mvc,asp.net-mvc-4,controller,partial-views,C#,Asp.net Mvc,Asp.net Mvc 4,Controller,Partial Views,我有2个控制器,生成2个索引视图。 我想做的是将这些视图用作全局共享局部视图,但似乎无法使其正常工作 有人知道这是否可能吗 我的控制器代码是 public ActionResult Index() { var viewModel = (from P in db.Projects join R in db.Reports on P.ProjectTitle equals R.ReportProj

我有2个控制器,生成2个索引视图。 我想做的是将这些视图用作全局共享局部视图,但似乎无法使其正常工作

有人知道这是否可能吗

我的控制器代码是

  public ActionResult Index()
        {

            var viewModel = (from P in db.Projects
                             join R in db.Reports on P.ProjectTitle equals R.ReportProjectID into ps
                             from R in ps.DefaultIfEmpty()
                             select new MyViewModel { Project = P, Report = R });


            return View(viewModel);
        }
我的ViewModel代码是

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace MiLife2.ViewModels
    {
    public class MyViewModel
    {
        public Project Project { get; set; }
        public Report Report { get; set; }
    }
    }
我的观点是

    @model IQueryable<MiLife2.ViewModels.MyViewModel>

    @{
    ViewBag.Title = "Index";
    }
    enter code here

<h2>Index</h2>
<div>@Html.Partial("_Partial1")</div>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
    </tr>

@foreach (var item in Model)
{
    <tr>
        <td>@item.Project.ProjectTitle </td>
        <td>@item.Project.ProjectCreatedByID</td>
        <td>@item.Project.ProjectCreatedDate</td>


        <td>@if (item.Report == null)
            {
                <text>No Reports</text>
            }
            else
            {
               @item.Report.Title;
            }
        </td>
        <td>@if (item.Report == null)
            {
                <text> </text>
            }
            else
            {
               @item.Report.Description;
            }</td>

        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Project.ProjectID }) |
            @Html.ActionLink("Details", "Details", new {  id=item.Project.ProjectID }) |
            @Html.ActionLink("Delete", "Delete", new {  id=item.Project.ProjectID })
        </td>
    </tr>
}

</table>
@model IQueryable
@{
ViewBag.Title=“Index”;
}
在这里输入代码
指数
@Html.Partial(“_Partial1”)

@ActionLink(“新建”、“创建”)

@foreach(模型中的var项目) { @item.Project.ProjectTitle @item.Project.ProjectCreatedByID @item.Project.ProjectCreatedDate @如果(item.Report==null) { 没有报告 } 其他的 { @项目.报告.标题; } @如果(item.Report==null) { } 其他的 { @项目.报告.说明; } @ActionLink(“编辑”,“编辑”,新的{id=item.Project.ProjectID})| @ActionLink(“详细信息”,“详细信息”,新的{id=item.Project.ProjectID})| @ActionLink(“删除”,“删除”,新的{id=item.Project.ProjectID}) }
如果我创建了一个部分页面,并将上面的视图粘贴到其中,然后使用@HTML.partial(“\u ProjPartial”),我会得到错误

传递到字典中的模型项的类型为“System.Collections.Generic.List
1[MiLife2.Project]”,但此字典需要类型为“System.Linq.IQueryable
1[MiLife2.ViewModels.MyViewModel]”的模型项


如果我在特定控制器视图文件夹的Index cshtml页面中使用@HTML.Partial(“\u ProjPartial”),则不会发生这种情况。

从错误中,我认为您的部分视图正在查找与视图中相同的模型。将模型传递给partial应该可以修复该错误

@Html.Partial("_Partial1", Model)
更新:

由于这对您不起作用,我将尝试使用ajax调用

$('.btnSubmit').on('click', function(){
    $.ajax({
         url: "@(Url.Action("Action", "Controller"))",
         type: "POST",
         cache: false,
         async: true,
         data: { id: id },
         success: function (result) {
             $(".Content").html(result);
         }
    });

 });
然后在你的控制器里

public PartialViewResult GetPartial()
    {

        var viewModel = (from P in db.Projects
                         join R in db.Reports on P.ProjectTitle equals R.ReportProjectID into ps
                         from R in ps.DefaultIfEmpty()
                         select new MyViewModel { Project = P, Report = R });


        return PartialView("_Partial1", viewModel);
    }

使用此ajax调用,您可以从任何视图调用局部视图,并且可以在单击按钮或根据需要刷新视图时传递不同的id。希望通过这种方式调用它可以修复您的错误。如果您有任何问题,请告诉我。

从错误中,我认为您的局部视图正在查找与视图中相同的模型。将模型传递给partial应该可以修复该错误

@Html.Partial("_Partial1", Model)
更新:

由于这对您不起作用,我将尝试使用ajax调用

$('.btnSubmit').on('click', function(){
    $.ajax({
         url: "@(Url.Action("Action", "Controller"))",
         type: "POST",
         cache: false,
         async: true,
         data: { id: id },
         success: function (result) {
             $(".Content").html(result);
         }
    });

 });
然后在你的控制器里

public PartialViewResult GetPartial()
    {

        var viewModel = (from P in db.Projects
                         join R in db.Reports on P.ProjectTitle equals R.ReportProjectID into ps
                         from R in ps.DefaultIfEmpty()
                         select new MyViewModel { Project = P, Report = R });


        return PartialView("_Partial1", viewModel);
    }

使用此ajax调用,您可以从任何视图调用局部视图,并且可以在单击按钮或根据需要刷新视图时传递不同的id。希望通过这种方式调用它可以修复您的错误。如果您有任何问题,请告诉我。

最近遇到类似情况,因此我想添加我的2美分。对我来说,答案就在于我所传递的部分观点

我试图向局部视图传递字符串,但当该字符串恰好为
null
时,它的行为就好像我没有向局部视图传递任何内容一样,这意味着它默认传递当前视图的模型

例如,我有一个视图,它呈现一个分部,该分部包含一个字符串:

@model SomeModel

@{ Html.RenderPartial("_MyPartialView", SomeModel.StringProperty) }
如果
SomeModel.StringProperty
恰好为
null
,则它将尝试传递当前视图的模型(在本例中为
SomeModel
)。因此,我只编写了以下代码,如果
SomeModel.StringProperty
恰好为空,则会传入一个空字符串:

@model SomeModel

@{ Html.RenderPartial("_MyPartialView", SomeModel.StringProperty ?? string.Empty) }

希望这对某人有所帮助。

最近遇到了类似的情况,所以我想增加我的2美分。对我来说,答案就在于我所传递的部分观点

我试图向局部视图传递字符串,但当该字符串恰好为
null
时,它的行为就好像我没有向局部视图传递任何内容一样,这意味着它默认传递当前视图的模型

例如,我有一个视图,它呈现一个分部,该分部包含一个字符串:

@model SomeModel

@{ Html.RenderPartial("_MyPartialView", SomeModel.StringProperty) }
如果
SomeModel.StringProperty
恰好为
null
,则它将尝试传递当前视图的模型(在本例中为
SomeModel
)。因此,我只编写了以下代码,如果
SomeModel.StringProperty
恰好为空,则会传入一个空字符串:

@model SomeModel

@{ Html.RenderPartial("_MyPartialView", SomeModel.StringProperty ?? string.Empty) }

希望这有助于某人。

如果你需要将一个控制器动作输出给一个视图,你应该考虑这个方法。我对MVC是新的,所以我不太清楚HTML。ReDeReActuon()是如何工作的。我是否应该在部分视图中呈现控制器操作,然后使用我的index.cshtml编码?为什么要将IQueryable传递给视图???@JMB说您有一个带有actionmethod X.partial()的控制器X,它使用的是部分视图“\u partial.cshtml”。然后是控制器Y和actionmethod Y.Index(),它使用一个视图“Index.cshtml”,并在该索引中呈现该部分视图。因此,在该索引中,您调用HTML。ReDeRebug(“X”,“部分”),并且您应该得到它。如果需要将控制器动作的输出呈现给视图,则应该考虑该方法。MIM是新的,所以我不太清楚HTML。ReDeReActuon()是如何工作的。我是否应该在部分视图中呈现控制器操作,然后使用我的index.cshtml编码?为什么要将IQueryable传递给视图???@JMB说您有一个带有actionmethod X.partial()的控制器X,它使用的是部分视图“\u partial.cshtml”。然后是控制器Y和actionmethod Y.Index(),它使用一个视图“Index.cshtml”,并在该索引中呈现该部分视图。所以在这个索引中,你调用Html.RenderAction(“X”,“Partial”),你应该得到它。这似乎没有什么区别,因为我仍然得到相同的错误