【问题标题】:Html helper within an html helper (rendering razor correctly from string literal)html 助手中的 Html 助手(从字符串文字正确呈现剃刀)
【发布时间】:2016-05-10 04:52:41
【问题描述】:

我为联系人模式制作了一个自定义 HTML 帮助程序,以便我们应用程序中的任何人都可以将它与 @Html.ContactModal 一起使用(模型和选项转到此处),但问题是在模式上还有另一个用于销售的 html 帮助程序代码下拉,剃须刀没有正确渲染。我试图用局部视图做所有事情,只是为了了解你不能(或不应该)将局部视图与 html 助手一起使用,只能使用控制器(我对所有这些都是新手......),一位同事建议我使用标签生成器,但我想先在这里询问,然后再使用标签生成器编写整个表单。

public static IHtmlString ContactModal(this HtmlHelper htmlHelper, ContactModalOptions options)
    {
        //required scripts
        htmlHelper.AddScriptFile("~/Areas/Customers/Scripts/ContactModal/tmi.customers.contactModal.js");
        htmlHelper.AddScriptLine("$('#" + options.controlId + "').contactModal(" + options.ToJson() + ");", true);
        string htmlContents = string.Empty;
        htmlContents = $@"<div id='contactModalContainer' style='display: none'>
<div class='panel panel-default panel-details' id='' style='display: none'>
    <div class='panel-heading' id='divContactModalHeading'>
        <h3 id='h3contactModalHeading'></h3>
    </div>
    <div class='panel-body' id='divContactDetBody'>
        <form id='custContactDetailsForm'>
            <div class='row'>
                <div class='col-sm-6'>
                    <div class='form-group' style=''>
                        <label for='txtFirstName' id='lblFirstName' class='control-label'>First Name: </label>

                        <input data-helper='FirstName' id='contactFirstName' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />

                    </div>
                </div>
                <div class='col-sm-6'>
                    <div class='form-group' style=''>
                        <label for='txtLastName' class='control-label'>Last Name: </label>
                        <input data-helper='LastName' id='contactLastName' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />
                    </div>
                </div>
                <div class='col-md-12'>
                    <div class='form-group' style=''>
                        <label for='txtPositionTitle'>Position/Title: </label>
                        <input id='contactPosition' data-helper='Position' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />

                    </div>
                </div>
                <div class='col-md-12'>
                    <div class='form-group' style=''>
                        <label for='txtSalesOrders'>E-mail: </label>

                        <input id='contactEmail' data-helper='Email' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />

                    </div>
                </div>
                <div class='col-sm-4'>
                    <div class='form-group' style=''>
                        <label for='txtSalesOrders'>Work Phone: </label>

                        <input id='contactWorkPhone' data-helper='DirectPhone' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />

                    </div>
                </div>
                <div class='col-sm-4'>
                    <div class='form-group' style=''>
                        <label for='txtMobilePhone'>Mobile Phone: </label>

                        <input id='contactMobile' data-helper='MobilePhone' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />
                    </div>
                </div>

                <div class='col-sm-4'>
                    <div class='form-group' style=''>
                        <label for='txtFax'>Fax: </label>
                        <input id='contactFax' data-helper='Fax' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />
                    </div>
                </div>


                <div class='col-sm-4'>
                    <div class='form-group' style=''>
                        <label for='txtHomePhone'>Home Phone: </label>

                        <input id='contactHomePh' data-helper='HomePhone' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />

                    </div>
                </div>

                <div class='col-sm-4'>
                    <div class='form-group' style=''>
                        <label for='txtPager'>Other Phone: </label>
                        <input id='contactPager' data-helper='PagerPhone' type='text' class='form-control' disabled='disabled' data-editable='true' value='' />
                    </div>
                </div>

                <div class='col-sm-12'>
                    <div class='form-group'>
                        <label for='txtNotes'>Notes/Comments: </label>
                        <textarea id='contactNotes' data-helper='ContactNotes' type='text' class='form-control' disabled='disabled' rows='3' data-editable='true' value=''></textarea>
                    </div>
                </div>

                <div class='col-sm-6'>
                    <div class='form-group' style=''>
                        <label for='txtDateAdded'>Date Added: </label>
                        <label id='contactDateAdded'></label>
                    </div>
                </div>

                <div class='col-sm-6' style='clear: both'>
                    <div class='form-group'>
                        <label class='control-label'>Referred By:</label>
                        <div class=''>
                            @@Html.SalesCodeDropDown(new SelectControlOptionsBase('contactReferredBy')
                       {{
                            includeNull = true,isEditable = editableOptions.yes,
                           disabled = true,
                       }})
                        </ div >

                    </ div >
                </ div >
                < div class='col-md-6' style='clear: both'>
                    <div class='form-group' style=''>
                        <label for='txtEnteredBy'>Entered By: </label>

                        <label id = 'contactEnteredBy' ></ label >

                    </ div >
                </ div >
                < div class='col-md-6' style='clear: both'>
                    <div class='checkbox'>
                        <label>
                            <input id = 'contactIsInactiveChkBx' data-helper='Inactive' type='checkbox' disabled data-editable='true' value='0'>Inactive
                          </label>
                    </div>
                </div>
            </div>
        </form>
    </div>
</div>


<div id = 'contactModalFooter' class='form-group' style=''>
    <button type = 'button' id='btnContactModalClose' style='margin-right: 5px;' class='pull-right btn btn-form-state'>Close</button>
    <button type = 'button' id='btnContactModalCancel' style='margin-right: 5px;' class='pull-right btn btn-form-state'>Cancel</button>
    <button type = 'button' id='btnContactModalSave' style='background-color: #EE6723; margin-right: 5px;' class='pull-right btn btn-form-state'>Save</button>
</div>

"; 返回 MvcHtmlString.Create(htmlContents);

【问题讨论】:

  • 对不起,如果这听起来很刺耳,但这与 HtmlHelper 扩展方法的用途相差甚远(无论如何,您尝试生成的 html 很少会起作用)。如果您想要一个可重用的“模态表单”,请基于模型创建局部视图或自定义EditorTemplate,并使用@Html.Partial() 或@Html.EditorFor() 生成它

标签: asp.net-mvc razor html-helper string-literals


【解决方案1】:

这最终奏效了:

       public static IHtmlString ContactModal(this HtmlHelper htmlHelper, ContactModalOptions options)
    {
        StringBuilder result = new StringBuilder();

        //required scripts
        htmlHelper.AddScriptFile("~/Areas/Customers/Scripts/ContactModal/tmi.customers.contactModal.js");
        htmlHelper.AddScriptLine("$('#" + options.controlId + "').contactModal(" + options.ToJson() + ");", true);
        var body = htmlHelper.Partial("~/Areas/Customers/Views/Contacts/Shared/ContactModalPartial.cshtml").ToHtmlString();
        result.AppendLine(body);
        return MvcHtmlString.Create(result.ToString());
    }

【讨论】:

    【解决方案2】:

    如果您的 @Html.SalesCodeDropDown(new SelectControlOptionsBase('contactReferredBy') 返回 html,则只需在设置变量 htmlContents 之前调用它,然后将其连接到您需要的位置。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2011-05-07
      • 2019-08-01
      • 2017-02-22
      相关资源
      最近更新 更多