Orchardcms 如何在Orchard CMS中使用/添加现有媒体库小部件到自定义小部件中?

Orchardcms 如何在Orchard CMS中使用/添加现有媒体库小部件到自定义小部件中?,orchardcms,Orchardcms,我正在编写一个自定义小部件,我想创建一个表单,其中包含一个从现有媒体库中选择图像的图像选择器。我注意到我可以使用现有的媒体库小部件,但我不知道如何将其包含在我的小部件中。我可以从EditPart视图导入它吗 [更新] 下面是示例代码的一部分。假设您有此编辑零件模板: @using MediaLibrary.FilePicker //Is there a way to add it doing something like this?? @model Maps.Models.MapPart &l

我正在编写一个自定义小部件,我想创建一个表单,其中包含一个从现有媒体库中选择图像的图像选择器。我注意到我可以使用现有的媒体库小部件,但我不知道如何将其包含在我的小部件中。我可以从EditPart视图导入它吗

[更新] 下面是示例代码的一部分。假设您有此编辑零件模板:

@using MediaLibrary.FilePicker //Is there a way to add it doing something like this??
@model Maps.Models.MapPart

<fieldset>
  <legend>Map Fields</legend>

   <div class="editor-label">
     @Html.LabelFor(model => model.Latitude)
   </div>
   <div class="editor-field">
      @Html.TextBoxFor(model => model.Latitude)
      @Html.ValidationMessageFor(model => model.Latitude)
   </div>

    <div class="editor-label">
      @Html.LabelFor(model => model.Longitude)
    </div>
    <div class="editor-field">
      @Html.TextBoxFor(model => model.Longitude)
      @Html.ValidationMessageFor(model => model.Longitude)
    </div>

</fieldset>
@使用MediaLibrary.FilePicker//有没有一种方法可以像这样添加它??
@模型映射.Models.MapPart
地图字段
@LabelFor(model=>model.Latitude)
@Html.TextBoxFor(model=>model.Latitude)
@Html.ValidationMessageFor(model=>model.Latitude)
@LabelFor(model=>model.Longitude)
@Html.TextBoxFor(model=>model.Longitude)
@Html.ValidationMessageFor(model=>model.Longitude)

只需添加一个媒体库选取器字段。

只需添加一个媒体库选取器字段。

我找到了方法

我试图使用自定义小部件中的图像选择器。以下是我完成这项工作的步骤

1.将对MediaPicker库的引用添加到我的小部件项目中。 2.添加以下代码:

@using Orchard.ContentManagement
@using Orchard.Utility.Extensions
@using Orchard.MediaPicker
@model MyWidget.Models.PickerForm
<div class="editor-label">
    <label for="ImageUrl">Image Url</label>
</div>
<div class="editor-field">
    @Html.TextBoxFor(m => m.ImagePath, new { @class = "text single-line", @id = "ImageUrl" })<br />
    @Html.ValidationMessageFor(m => m.ImagePath)<br />
    <input type="button" class="button" id="PickImageUrl" value="Pick Image" />
</div>
@using (Script.Foot())
{
<script type="text/javascript">
    //<![CDATA[
    jQuery(function ($) {
        var baseUrl = "@HttpContext.Current.Request.ToRootUrlString().TrimEnd('/')";
        $("#PickImageUrl").click(function () {
            $("form").trigger("orchard-admin-pickimage-open",
            {
                img: $("#ImageUrl").val(),
                uploadMediaPath: "About",
                callback: function (data) {
                    $("#ImageUrl").val(baseUrl + data.img.src);
                }
            });
        });
    });
//]]>
</script>
}
使用Orchard.ContentManagement @使用Orchard.Utility.Extensions @使用Orchard.MediaPicker @模型MyWidget.Models.PickPerform 图像Url @Html.TextBoxFor(m=>m.ImagePath,新的{@class=“text single line”,@id=“ImageUrl”})
@Html.ValidationMessageFor(m=>m.ImagePath)
@使用(Script.Foot()) { // }

我知道怎么做了

我试图使用自定义小部件中的图像选择器。以下是我完成这项工作的步骤

1.将对MediaPicker库的引用添加到我的小部件项目中。 2.添加以下代码:

@using Orchard.ContentManagement
@using Orchard.Utility.Extensions
@using Orchard.MediaPicker
@model MyWidget.Models.PickerForm
<div class="editor-label">
    <label for="ImageUrl">Image Url</label>
</div>
<div class="editor-field">
    @Html.TextBoxFor(m => m.ImagePath, new { @class = "text single-line", @id = "ImageUrl" })<br />
    @Html.ValidationMessageFor(m => m.ImagePath)<br />
    <input type="button" class="button" id="PickImageUrl" value="Pick Image" />
</div>
@using (Script.Foot())
{
<script type="text/javascript">
    //<![CDATA[
    jQuery(function ($) {
        var baseUrl = "@HttpContext.Current.Request.ToRootUrlString().TrimEnd('/')";
        $("#PickImageUrl").click(function () {
            $("form").trigger("orchard-admin-pickimage-open",
            {
                img: $("#ImageUrl").val(),
                uploadMediaPath: "About",
                callback: function (data) {
                    $("#ImageUrl").val(baseUrl + data.img.src);
                }
            });
        });
    });
//]]>
</script>
}
使用Orchard.ContentManagement @使用Orchard.Utility.Extensions @使用Orchard.MediaPicker @模型MyWidget.Models.PickPerform 图像Url @Html.TextBoxFor(m=>m.ImagePath,新的{@class=“text single line”,@id=“ImageUrl”})
@Html.ValidationMessageFor(m=>m.ImagePath)
@使用(Script.Foot()) { // }

您能否更详细地说明如何将此媒体库添加到“我的编辑视图”中?或者,如果需要,我的ContentPart类?对不起,我有点迷路了。到目前为止,我刚刚创建了新的小部件,但没有在新的小部件中使用现有的小部件。您不能在另一个小部件中使用小部件,但可以向小部件内容类型添加字段。只需转到内容定义并将媒体库选择器字段添加到小部件的内容类型,或从迁移中添加该字段。无论哪种方法都比复制用于图像拾取的脚本简单得多。您能否更具体地说明如何将此媒体库添加到“我的编辑视图”中?或者,如果需要,我的ContentPart类?对不起,我有点迷路了。到目前为止,我刚刚创建了新的小部件,但没有在新的小部件中使用现有的小部件。您不能在另一个小部件中使用小部件,但可以向小部件内容类型添加字段。只需转到内容定义并将媒体库选择器字段添加到小部件的内容类型,或从迁移中添加该字段。这两种方法都比复制用于图像拾取的脚本简单得多。您在这里硬编码字段的id,而不是使用使用前缀的标准做法。这将导致冲突。相反,使用
Html.IdFor(m=>m.ImagePath)
获取文本框的运行时id。然后,您可以在脚本中使用它,而不是硬编码的
#ImageUrl
。谢谢@BertrandLeroy,这是一个很好的观察结果。我会做这个改变。你在这里硬编码字段的id,而不是使用前缀的标准做法。这将导致冲突。相反,使用
Html.IdFor(m=>m.ImagePath)
获取文本框的运行时id。然后,您可以在脚本中使用它,而不是硬编码的
#ImageUrl
。谢谢@BertrandLeroy,这是一个很好的观察结果。我会改变的。