【问题标题】:How can I get HTMLPREFIX inside the partial view i Razor如何在 Razor 的局部视图中获取 HTMLPREFIX
【发布时间】:2012-11-30 05:12:20
【问题描述】:

您好,我需要在局部视图中获取 Html 前缀。

我在渲染局部视图的位置附加了这样的前缀

 Html.RenderPartial("Person", Model.Person, new ViewDataDictionary(Html.ViewDataContainer.ViewData)
{
    TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "DelegatePerson"}
});

现在当我进入 Person PartialView 在这种情况下我需要前缀。

@Html.TextBoxFor(model => model.CPR, new { @class = "numericTextbox", maxlength = 10, id = "CprField", onkeyup ="CprFieldEdited("[HTMLPrefix]_FieldName");" })

但是我不知道该怎么做。我已经搜索了很长时间。 我希望有人知道如何做到这一点或类似的事情。

编辑:

这意味着我应该能够告诉 Javascript 函数 CprFieldEdited 它应该搜索的 html 前缀在这种情况下是“DelegatePerson”

编辑 2: 我的意思似乎不太清楚,所以我会尝试提供更多代码。

主页:

 //None relevant Code here
@Scripts.Render("~/bundles/person_search")
//None relevant Code here
        <Body>
    //None relevant Code here
               Html.RenderPartial("Person", Model.Person, new ViewDataDictionary(Html.ViewDataContainer.ViewData)
               {
                   TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "DelegatePerson"}
               });
        //None relevant Code here
               Html.RenderPartial("Person", Model.Person, new ViewDataDictionary(Html.ViewDataContainer.ViewData)
               {
                   TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "EmployerPerson"}
               });
        //None relevant Code here
            </body>

在这种情况下,我有两个相同类型的 Partials 呈现在同一页面上。但是在它们里面我需要告诉Javascript包现在正在使用其中的一个,因为我不能使用它们被用于其他东西的ID我的想法是什么使用带有前缀的Name属性但是正如下一个代码所示我可以'不要给 javascript 前缀以区分两个部分

 @Html.TextBoxFor(model => model.CPR, new {id = "CprField", onkeyup ="CprFieldEdited("[FieldNameWithPartialPrefix]");" })

问题是我不能给 CprFieldEdited("[FieldNameWithPartialPrefix]"); javascript "[FieldNameWithPartialPrefix]" 可以是 "DelegatePerson_Fieldname" 或 "EmployerPerson"

【问题讨论】:

  • 是的,Javascript 将需要前缀来区分主页上的部分和主页上另一个部分中的部分。如果这有任何意义
  • 您不需要为此传递HtmlFieldPrefix。就做ViewBag.CustomPrefix = "your_prefix";
  • 啊,现在我找到了解决方案,你在@rae1n 我已经在主页中设置了 Viewbag 并在部分页面中使用它。它是如此简单,我只是没有意识到。非常感谢。我会将您的答案标记为最佳答案。

标签: c# javascript jquery razor asp.net-mvc-4


【解决方案1】:
((System.Web.Mvc.ViewDataDictionary)(ViewData)).TemplateInfo.HtmlFieldPrefix

【讨论】:

    【解决方案2】:

    您不需要使用HtmlFieldPrefix 传递前缀。您可以使用ViewBag 传递它(其工作方式类似于ViewData,但更推荐使用)。

    做吧,

     @Html.RenderPartial(
         "Person", 
         Model.Person, 
         new ViewDataDictionary()
             {
                  { "Custom Prefix", "your_prefix" }
             });
    

    或者,您可以在部分中定义前缀,

    @{
        ViewBag.CustomPrefix = "your_prefix";
    }
    

    无论以哪种方式访问​​它,都可以,

    <a onkeyup="@ViewBag.CustomPrefix"> ... </a>
    

    您可以使用ViewBag 传递任何内容,因为它是dynamic。更多info.

    【讨论】:

    • 好吧,我可以这样做,但我不会激活我的 Javascript 然后 onkeyup ="CprFieldEdited("[HTMLPrefix]_FieldName");"这仍然需要一种方法来区分同一页面上相同的 Partial 两个位置。
    • 我对此发表了评论。你能更具体地说明你需要做什么吗?为什么需要HtmlFieldPrefix?如果你需要区分两个partials,为什么不能从partial name中提取出来呢?
    • 因为如果我不给它一个前缀并在 javascript 中获取前缀,我将不得不制作两个对不同地方执行相同任务的 javascript,这不是我想要的.我可能会使 Javascript 有点笨拙,但现在它可以工作了,我只需要确保它更通用。但是,我现在看到您对 viewbag.CustomPrefix 的评论,我只有一个问题,是否可以在使用部分的页面中进行设置,以便每个部分都知道它们来自哪里。如果我不清楚我的第一语言不是英语,我很抱歉,所以这对我来说非常困难。
    • @Helbo 我更新了答案以显示您的要求。如果有帮助,请不要忘记将其标记为答案。
    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 2017-07-13
    • 2019-03-16
    • 2012-11-26
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多