【问题标题】:Import HTML BeginForm from other view从其他视图导入 HTML BeginForm
【发布时间】:2015-10-04 18:12:57
【问题描述】:

我有 BlogHomePage.cshtml 作为主页

@model IEnumerable<WebApplication1.Models.Post>

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

    <div id="content">
    <!--Content of the blog-->
    @foreach (var post in Model)
    {
        <div id="mainContent">
            <section>
                <article class="blogPost">
                    <header>
                        <h2>@Html.DisplayFor(modelItem => post.PostTitle)</h2>
                        <p>Posted on @Html.DisplayFor(modelItem => post.PostDate) by <a target="_new" href=@Html.DisplayFor(modelItem => post.WebSite)>@Html.DisplayFor(modelItem => post.PostAuthor)</a> - <a href="#@Html.DisplayFor(modelitem => post.PostID)">@Html.DisplayFor(modelItem => post.Comments.Count) comments</a></p>
                    </header>
                    <div>
                        <p class="blogContent">@Html.DisplayFor(modelItem => post.PostText)</p>                  
                    </div>
                    @if (!post.PostImage.IsEmpty())
                    {                     
                            <img src="@Url.Content(post.PostImage)" alt="@post.PostAuthor" width="500" />                        
                    }
                    <br/>
                    @if (!post.PostVideo.IsEmpty())
                    {
                        <img src="@Url.Content(post.PostVideo)" alt="@post.PostVideo" width="500" />
                    }

                </article>
                <!----creating an anchor on the page to point to comments of the post -->
                <a name="@Html.DisplayFor(modelitem => post.PostID)"></a>
            </section>
        </div>

        //Change background of odds comments
        bool counter = true;
        foreach (var comment in post.Comments)
        {
            if (counter)
            {
                counter = false;
            }
            else
            {
                counter = true;
            }

            <section id="@(counter==true ? "commentstrue":"comments")">
                <!--Comments of bloggers-->
                <article class="commentswidth">
                    <header>
                        <h3>@Html.DisplayFor(modelComment => comment.CommentTitle)</h3>
                        <a target ="_new" href=@Html.DisplayFor(modelComment => comment.CommentWebSite)>@Html.DisplayFor(modelComment => comment.CommentAuthor)</a>
                    </header>
                    <p>@Html.DisplayFor(modelComment => comment.CommentText)</p>
                </article>
            </section>
        }
        <br />

        <!--Comments form-->

    }
    </div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

我想从我的 CommentsController 上的“创建”操作中“导入”我的 htmlbeginform

@model WebApplication1.Models.Comment

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

<h2>Create</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Comment</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.PostID, "PostID", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("PostID", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.PostID, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.CommentTitle, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.CommentTitle, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.CommentTitle, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.CommentAuthor, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.CommentAuthor, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.CommentAuthor, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.CommentWebSite, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.CommentWebSite, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.CommentWebSite, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.CommentText, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.CommentText, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.CommentText, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

这条线工作,但我可以看到页面内页(包括布局),我不想要它。 @Html.Action("创建","评论")

这条线在没有关于页面布局的情况下工作: @Html.Partial("关于") 但它不适用于创建 cmets 页面,我无法传递 Model.Comments

【问题讨论】:

  • 你能详细说明一下,为什么要“导入” htmlbeginform ?
  • 我有博文主页。在此页面中,我看到很少的博客、cmets 和“发表评论表”。对于模型中的每个项目,我都可以看到博客。我无法访问此视图的 cmets,因为我已经有一个模型(博客)。我想在“评论文件夹”上导入视图“创建评论”的 html 开始表单。我可以导入任何没有模型的视图,但我无法导入带有模型的视图。要恢复,我想在此页面的其他页面中查看表单。 @SivaGopal

标签: asp.net-mvc render partial


【解决方案1】:

如果您想在另一个表单中嵌入/导入一个表单,那么

1) 您可以使用局部视图

2) 对于部分视图,您不使用主/网站布局/主视图,否则它看起来网站在您的主视图中重复并且丑陋!因此,您可以在局部视图中将布局设置为 null,如下所示:

@{
   Layout = null;
}

3) 现在要渲染局部视图,您可以将局部视图的名称指定给 html 帮助器 @Html.RenderPartial(...)。如果您需要传入,此帮助器的重载之一也接受 Model 对象。例如如果您想将评论列表传递给部分视图“_Comments.cshtml”,那么:

@{ Html.RenderPartial("_Comments.cshtml", Model.CommentsList)} 
//Assuming Model.CommentsList is of type: IEnumerable<Comment>

通常的约定是在部分视图名称前加上下划线:“_”

4) 还要确保您传递到上面部分视图的模型对象和部分视图接受的模型类型是兼容的。

例如

@model IEnumerable<Comment>

注意:我的回答中的所有对象/类型和名称都是为了向您提供一些详细信息而选择的,可能不一定是您的情况。

希望这会有所帮助...

【讨论】:

    【解决方案2】:

    在视图上使用此代码:

    @Html.Action("View page name","Controller name")
    

    将此粘贴​​到您要“导入”的视图上

    @{
        ViewBag.Title = "NameOfView";
        Layout = null;
    }
    

    【讨论】:

      【解决方案3】:
      @using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                                            new { enctype = "multipart/form-data" }))
      {
          @Html.ValidationSummary(true)
          <fieldset>
              Select a file <input type="file" name="file" />
              <input type="submit" value="Upload" />
          </fieldset>
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 1970-01-01
        相关资源
        最近更新 更多