C# 呈现部分未呈现.NET mvc

C# 呈现部分未呈现.NET mvc,c#,asp.net-mvc,asp.net-mvc-4,razor,view,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,View,我在渲染部分时遇到了一个问题。我环顾四周,发现应该将局部视图的路径作为第一个参数传递,如果使用模型,则将其作为第二个参数传递,因为它是重载之一。我得到了页面,没有任何爆炸,但是部分视图没有输出我期望的结果,并且我不能在该部分上命中断点(它使用循环)。我已经确认我正在给它传递一个带有数据的模型,但是这个部分似乎没有受到影响。这是我的控制器和部分 DataBass db = new DataBass(); public ActionResult Address() {

我在渲染部分时遇到了一个问题。我环顾四周,发现应该将局部视图的路径作为第一个参数传递,如果使用模型,则将其作为第二个参数传递,因为它是重载之一。我得到了页面,没有任何爆炸,但是部分视图没有输出我期望的结果,并且我不能在该部分上命中断点(它使用循环)。我已经确认我正在给它传递一个带有数据的模型,但是这个部分似乎没有受到影响。这是我的控制器和部分

    DataBass db = new DataBass();

    public ActionResult Address()
    {
        Models.ViewModels.CheckoutViewModel x = new Models.ViewModels.CheckoutViewModel();

        if (User.Identity.IsAuthenticated)
        {
            using(DataBass oDB = new DataBass())
            {
                var Customer = oDB.Customers.First(c => c.Email.ToLower() == User.Identity.Name.ToLower());
                var AvailableAddresses = oDB.AddressBooks.Where(ab => ab.CustomerID == Customer.ID).ToList();
                x.CustomerID = Customer.ID;
                x.HasExistingAddresses = (AvailableAddresses.Count > 0 ? false : true);
                x.AvailableAddresses = AvailableAddresses;


            }
            //var UserAddresses = db.AddressBooks.Where(a => a.Customer.Email == User.Identity.Name);
            //ViewBag.Addresses = UserAddresses;
            return View("Shipping", x);
        }                
        else
            return View("Index");
    }
这是我遇到麻烦的部分观点。这是不会被击中的

@model IEnumerable<Models.AddressBook>

<h2>AddressBook</h2>

<table class="table">
    <tr>
        <th>
            Address 2
        </th>
        <th>
           Address 1
        </th>
        <th>
            City
        </th>
        <th>
            State
        </th>
        <th>
            Postal Code
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        var states = (List<Models.State>)ViewBag.States;

        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Address1)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Address2)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.City)
            </td>
            <td>
                @states.FirstOrDefault(x => x.ID.ToString() == item.StateID).Name
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Zipcode)
            </td>
            <td>
                @Html.ActionLink("Choose this one","", new { id = item.ID}, new { @class="button"})
                @*@Html.ActionLink("Edit", "EditAddress", new { id = item.ID }, null) |
                @Html.ActionLink("Delete", "DeleteAddress", new { id = item.ID }, null)

                @*<a href="/Account/EditAddress/@item.AddressBook_ID">Edit</a> |
                    <a href="/Account/DeleteAddress/@item.AddressBook_ID">Delete</a>
                @Html.ActionLink("Edit", "EditAddress", new { id = item.ID }, null) |
                @Html.ActionLink("Edit", "EditAddress", "Account",new { id=item.AddressBook_ID }, htmlAttributes: null ) |
                @Html.ActionLink("Delete", "DeleteAddress", new { id = item.ID }, null)*@
            </td>
        </tr>
    }

</table>
@model IEnumerable
通讯录
地址2
地址1
城市
陈述
邮政编码
@foreach(模型中的var项目)
{
变量状态=(列表)ViewBag.states;
@DisplayFor(modelItem=>item.Address1)
@DisplayFor(modelItem=>item.Address2)
@DisplayFor(modeleItem=>item.City)
@states.FirstOrDefault(x=>x.ID.ToString()==item.StateID).Name
@DisplayFor(modelItem=>item.Zipcode)
@ActionLink(“选择这个”,新建{id=item.id},新建{@class=“button”})
@*@ActionLink(“编辑”,“编辑地址”,新的{id=item.id},空)|
@ActionLink(“删除”,“删除地址”,新的{id=item.id},空)
@* |
@ActionLink(“编辑”,“编辑地址”,新的{id=item.id},空)|
@ActionLink(“编辑”、“编辑地址”、“帐户”,新的{id=item.AddressBook\u id},htmlAttributes:null)|
@ActionLink(“删除”,“删除地址”,新的{id=item.id},空)*@
}
这是我的视图,它调用renderpartial方法来选择上面显示的ChooseExistingAddress.cshtml部分

@model Models.ViewModels.CheckoutViewModel

@{
    ViewBag.Title = "Shipping Selection";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Shipping</h2>
@if (Model.HasExistingAddresses)
{
    Html.RenderPartial("~/Views/Checkout/ChooseExistingAddress.cshtml", Model.AvailableAddresses);

}
else
{
    Html.RenderPartial("~/Views/Checkout/AddNewShippingAddress.cshtml");
}
@model Models.ViewModels.CheckoutViewModel
@{
ViewBag.Title=“装运选择”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
航运
@if(Model.HasExistingAddresses)
{
RenderPartial(“~/Views/Checkout/chooseeexistingaddress.cshtml”,Model.availableAddress);
}
其他的
{
RenderPartial(“~/Views/Checkout/AddNewShippingAddress.cshtml”);
}

您已将三元逻辑向后:

x.HasExistingAddresses = (AvailableAddresses.Count > 0 ? false : true);
换句话说,如果地址计数大于0,则将其设置为false,而在这种情况下,它应该为true。无论如何,你不需要三元数。只需将其设置为布尔表达式的结果:

x.HasExistingAddresses = AvailableAddresses.Count > 0;

你的三元逻辑倒过来了:

x.HasExistingAddresses = (AvailableAddresses.Count > 0 ? false : true);
换句话说,如果地址计数大于0,则将其设置为false,而在这种情况下,它应该为true。无论如何,你不需要三元数。只需将其设置为布尔表达式的结果:

x.HasExistingAddresses = AvailableAddresses.Count > 0;

将“~/Views/Checkout/ChooseExistingAddress.cshtml”更改为“ChooseExistingAddress”,“Checkout”将其修改为Html.RenderPartial(“ChooseExistingAddress”,Model.availableAddress);我仍然得到同样的结果。视图、控制器和模型没有过载。查看您的部分,看起来您有一些无效的razor注释,您在第一个编辑链接旁边有一个开始注释,但没有匹配的结束标记。我从部分中删除了注释,仍然没有命中断点,并且没有任何内容呈现到它的位置更改“~/Views/Checkout/ChooseExistingAddress.cshtml”到“ChooseExistingAddress”,“Checkout”将其修改为Html.RenderPartial(“ChooseExistingAddress”,Model.availableAddress);我仍然得到相同的结果。视图、控制器和模型没有过载。查看您的部分,看起来您有一些无效的razor注释,在第一个编辑链接旁边有一个开始注释,但没有匹配的结束标记。我从部分中删除了注释,仍然没有遇到断点,并且没有任何渲染对于它的位置,您可以使用LINQ的Any方法;AvailabledAddresses.Any()进一步简化它。使用Count属性会更快,但我怀疑这会有明显的不同。谢谢,这是我的新手错误。您可以使用LINQ的Any方法;AvailabledAddresses.Any()进一步简化它。使用Count属性会更快,但我怀疑会有明显的不同。这已奏效。谢谢,这是我的新手错误。