MVC3 ASP使用视图上的空白空间替换空值

时间:2013-03-13 14:53:48

标签: asp.net-mvc-3 if-statement replace null

如果POnumber为null,我有以下视图返回一些文本。 我认为我需要而不是if(Model.Invoice.PONumber == null)是一个检查机制(可能是多个if语句),它将检查字段LineNumber,Description,UnitOfMeasure,QtyOrdered以及它们是否为null它将用N / A或空格替换它,但它仍然允许用户查看剩余的可用信息。 你有任何吸烟吗?我是MVC的新手,任何帮助都会被贬低。

提前感谢您的时间和帮助,Bobby

<div class="contentWrapper2">
    <div class="content2">
        <div class="clr lfl w100">
            <h1>Invoice Detail</h1>
            <div class="return-btn">
                <a class="btn btnStyleC btn-back-invoice" href="@Url.Action("InvoiceHistory", "Account")">
                    Back to Invoice List</a>
            </div>
        </div>
        @if (Model.ErpError.Length > 0)
        {
            <div class="clr lfl w100 error">
                @Html.Raw(Model.ErpError)
            </div>
        }
        else
        {
            if(Model.Invoice.PONumber == null)
            {
                <div class="lfl w100 clr messaging">
                    <p>No information available at the moment for current invoice.
                       Please call our sales department for further assistance.
                    </p>
                </div>   
            }
            else
            {
                <div class="clr lfl w100">
                    <div class="order-number-date">
                        <table>
                            <tr>
                                <th class="col-1">
                                    <h3>Invoice #:</h3>
                                </th>
                                <td class="col-2">
                                    <h3>@Model.Invoice.InvoiceNumber</h3>
                                </td>
                            </tr>
                            <tr>
                                <th class="col-1">
                                    <h3>Invoice Date:</h3>
                                </th>
                                <td class="col-2">
                                    <h3>@Model.Invoice.InvoiceDate.ToShortDateString()</h3>
                                </td>
                            </tr>
                        </table>
                    </div>
                    <div class="order-number-date">
                        <table>
                            <tr>
                                <th class="col-1">
                                    <h3>Order #:</h3>
                                </th>
                                <td class="col-2">
                                    <h3>@Model.Invoice.OrderNumber</h3>
                                </td>
                            </tr>
                            <tr>
                                <th class="col-1">
                                    <h3>PO #:</h3>
                                </th>
                                <td class="col-2">
                                    <h3>@Model.Invoice.PONumber</h3>
                                </td>
                            </tr>
                            <tr>
                                <th class="col-1">
                                    <h3>Due Date:</h3>
                                </th>
                                <td class="col-2">
                                    <h3>@Model.Invoice.DueDate.ToShortDateString()</h3>
                                </td>
                            </tr>
                        </table>
                    </div>
                </div>
            <div class="clr lfl w100">
                <div class="bill-ship">
                    <table>
                        <tr>
                            <th>
                                <h4>Billing Information</h4>
                            </th>
                        </tr>
                        <tr>
                            <td>@Model.Invoice.BTDisplayName
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <@Html.Raw(Model.Invoice.BTAddress1)
                            </td>
                        </tr>
                        @if (!string.IsNullOrEmpty(Model.Invoice.BTAddress2))
                        {
                            <tr>
                                <td>@Html.Raw(Model.Invoice.BTAddress2)
                                </td>
                            </tr>
                        }
                        <tr>
                            <td>@Html.CityCommaStateZip(Model.Invoice.BTCity, Model.Invoice.BTState, Model.Invoice.BTZip)</td>
                        </tr>
                        <tr>
                            <td>@Model.Invoice.BTCountry
                            </td>
                        </tr>
                        <tr>
                            <td>@Model.Invoice.BTPhone1</td>
                        </tr>
                        <tr>
                            <td>@Model.Invoice.BTEmail
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
            if (Model.Invoice.InvoiceLines.Count > 0)
            {
                <div class="clr lfl w100 line-item-detail">
                    <table class="info-tbl">
                        <tr>
                            <th class="vid-item">Item #</th>
                            <th class="vid-desc">Description</th>
                            <th class="vid-um">
                                U/M
                            </th>
                            <th class="vid-qty">
                                Qty
                            </th>
                            <th class="vid-ship">
                                Ship Date
                            </th>
                            @if (Model.ShowPackslip)
                            {
                                <th class="vid-pack">Pack Slip</th>
                            }
                            <th class="vid-unit">Unit Price</th>
                            <th class="vid-ext">Ext Price</th>
                        </tr>
                        @foreach (var invoiceLine in Model.Invoice.InvoiceLines)
                        {
                            <tr>
                                <td class="vid-line">@invoiceLine.LineNumber</td>
                                <td class="vid-desc">@invoiceLine.Description</td>
                                <td class="vid-um">@invoiceLine.UnitOfMeasure</td>
                                <td class="vid-qty">@invoiceLine.QtyOrdered</td>
                                <td class="vid-ship">
                                @if (invoiceLine.ShipDate.ToShortDateString() == "1/1/0001")
                                {
                                }
                                else
                                {
                                    @invoiceLine.ShipDate.ToShortDateString()
                                }
                                </td>
                                @if (Model.ShowPackslip)
                                {
                                    <td class="vid-pack">
                                    <a href="@Url.RouteUrl(new { controller = "Account", action = "ShipmentDetail", PackSlipNum = invoiceLine.PackSlip })">@invoiceLine.PackSlip</a>
                                    </td>
                                }
                                <td class="vid-unit">@invoiceLine.UnitPrice.ToCurrency()
                                </td>
                                <td class="vid-ext">@invoiceLine.ExtendedPrice.ToCurrency()
                                </td>
                            </tr>
                        }
                    </table>
                </div>
            }
            <div class="clr lfl w100">
                <table class="tbl-total">
                    <tr class="subtotal">
                        <th class="col-1">Subtotal</th>
                        <td class="col-2">@Model.Invoice.OrderSubTotal.ToCurrency()
                        </td>
                    </tr>
                    @if (Model.Invoice.DollarOffOrder > 0)
                    {
                        <tr>
                            <th class="col-1">Order Discount</th>
                            <td class="col-2">@Model.Invoice.DollarOffOrder.ToCurrency()</td>
                        </tr>
                    }
                    @if (Model.Invoice.ShippingAndHandling > 0)
                    {
                        <tr>
                            <th class="col-1">Shipping</th>
                            <td class="col-2">@Model.Invoice.ShippingAndHandling.ToCurrency()
                            </td>
                        </tr>
                    }
                    @if (Model.Invoice.MiscCharges > 0)
                    {
                        <tr>
                            <th class="col-1">Misc. Charges</th>
                            <td class="col-2">@Model.Invoice.MiscCharges.ToCurrency()</td>
                        </tr>
                    }
                    <tr>
                        <th class="col-1">Sales Tax</th>
                        <td class="col-2">@Model.Invoice.TotalTax.ToCurrency()</td>
                    </tr>
                    <tr>
                        <th class="col-1">Invoice Total</th>
                        <td class="col-2">@Model.Invoice.InvoiceTotal.ToCurrency()</td>
                    </tr>
                </table>
            </div>
            <div class="clr lfl w100">
        <a class="btn btnStyleB btn-print" href="javascript:window.print();">Print</a>
        </div>
    }
}
</div>
</div>

2 个答案:

答案 0 :(得分:0)

你可以创建一个名为“nullcheck.cshtml”的模板,如:

@if (ViewBag.ValueToCheck == null) {
  <div class="lfl w100 clr messaging">
     <p>
         No information available at the moment for @(ViewBag.Field).
        Please call our sales department for further assistance.
     </p>
  </div>  
}
else {
   @Html.Partial(ViewBag.TargetTemplate, Model)
}

然后从主视图中调用它:

@{
    ViewBag.TargetTemplate = "okModel";
    ViewBag.Field = "P.O.Number";
    ViewBag.ValueToCheck = Model.Invoice.PONumber; 
    Html.RenderPartial("nullCheck", Model, ViewBag);
}

okModel.cshtml应该是模板的一部分,当值不为空时,它将显示...

我自己没有对此进行过测试,但它应该给你一些想法......如果出现问题请与我联系XD

干杯!

答案 1 :(得分:0)

这似乎是您应该在控制器中处理的事情。

public ActionResult YourControllerAction()
{
    var myViewModel = SomeService.GetMyViewModel();
    if (myViewModel.Invoice.PONumber == null)
    {
        myViewModel.Invoice.PONumber = "N/A";
    }

    //etc
}

这使您的观点更加清晰(我个人的偏好)

但是在视图中,你可以简单地使用null coalescing operator,如下所示:

@Model.Invoice.PONumber ?? "NA"