Asp.net mvc 将模型Id传递给partialView以进行编辑

Asp.net mvc 将模型Id传递给partialView以进行编辑,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,razor,asp.net-mvc-partialview,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Razor,Asp.net Mvc Partialview,我有一个进入视图的摄影对象列表:- Public class Photography { public Photography() { Name = ""; Description = ""; Category = ""; ImgUrl = ""; IsAccordion = false; } public string Name { get; set; } public st

我有一个进入视图的摄影对象列表:-

Public class Photography
{
    public Photography()
    {
        Name = "";
        Description = "";
        Category = "";
        ImgUrl = "";
        IsAccordion = false;
    }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Category { get; set; }
    public string ImgUrl { get; set; }
    public bool IsAccordion { get; set; }
}
在我看来,我是这样循环浏览列表的:

@foreach (var item in Model.Photographys)
{
    <li class="span3" style="text-align: center">
        <div class="thumbnail thumbnail-1">
            <h3 style="margin-bottom: 10px;">@item.Name</h3>
            <div class="">
                <div class="">
                    <img src="@item.ImgUrl" alt="" style="visibility: visible; opacity: 1;">
                </div>
            </div>
            <section>
                <p>@item.Description</p>
                <a href="#" class="btn btn-1">Read More</a>
                <p>@item.IsAccordion</p>
            </section>
        </div>
    </li>
}
@model aPhoto_web.Models.AdminPages.Photography

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

    <div class="form-horizontal">
        <h4>Photography</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>
}
@foreach(模型中的变量项。照片)
{
  • @项目名称 @项目.说明

    @项目1.I协调

  • }
    我想做的是有一个局部视图,让我编辑我点击的照片的属性。我已使用“编辑”脚手架选项创建了一个局部视图。它如下所示:

    @foreach (var item in Model.Photographys)
    {
        <li class="span3" style="text-align: center">
            <div class="thumbnail thumbnail-1">
                <h3 style="margin-bottom: 10px;">@item.Name</h3>
                <div class="">
                    <div class="">
                        <img src="@item.ImgUrl" alt="" style="visibility: visible; opacity: 1;">
                    </div>
                </div>
                <section>
                    <p>@item.Description</p>
                    <a href="#" class="btn btn-1">Read More</a>
                    <p>@item.IsAccordion</p>
                </section>
            </div>
        </li>
    }
    
    @model aPhoto_web.Models.AdminPages.Photography
    
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    
        <div class="form-horizontal">
            <h4>Photography</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
                </div>
            </div>
    }
    
    @model aPhoto\u web.Models.AdminPages.Photography
    @使用(Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    摄影
    
    @Html.ValidationSummary(true,“,new{@class=“text danger”}) @LabelFor(model=>model.Name,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.Name,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.Name,“,new{@class=“text danger”}) }
    等等等等

    我读到的大多数partialView都是在父视图渲染时直接渲染的。这不是我想要的…我只希望partialView在我以某种方式将照片对象传递给它时出现

    我知道这是一个“大”问题,但如果有人能给我指出正确的方向,那就太好了!谢谢

    编辑以澄清: 看看这段代码,我在循环的底部添加了一个“RenderPartial”

    @foreach (var item in Model.Photographys)
    {
        <li class="span3" style="text-align: center">
    
            <div class="thumbnail thumbnail-1">
                <h3 style="margin-bottom: 10px;">@item.Name</h3>
    
                <div class="">
                    <div class="">
                        <img src="@item.ImgUrl" alt="" style="visibility: visible; opacity: 1;">
                    </div>
                </div>
    
                <section>                          
                    <p>@item.Description</p>
                    <a href="#" class="btn btn-1">Read More</a>
                    <p>@item.IsAccordion</p>
                </section>
            </div>
    
            @{
                Html.RenderPartial("_editPhoto", item);
            }
        </li>
    }
    
    @foreach(模型中的变量项。照片)
    {
    
  • @项目名称 @项目.说明

    @项目1.I协调

    @{ Html.RenderPartial(“_editPhoto”,项目); }
  • }
    当然,这会为循环中的每个项目呈现局部视图。我想一个方法,通过我点击的对象的部分

    编辑:

    public ActionResult编辑照片(字符串id)
    {
    var photo=RavenSession.Load(id)作为摄影;
    返回部分视图(“编辑照片”,照片);
    }
    
    首先,您必须添加一个控制器方法,该方法以摄影名称/ID(最好是将ID属性添加到摄影类)作为参数,并返回您创建的局部视图

    然后,当您单击照片时,您可以使用Jquery将照片名称/ID传递给created controller方法,您可以使用弹出窗口或在页面内的特定元素(例如DIV)中显示结果

    示例

    当您在视图中循环摄影对象时,您可以向img标记添加一个类和ID属性,如下所示

    <img src="@item.ImgUrl" alt="" class="photography-image" data-imgId="@item.ID" style="visibility: visible; opacity: 1;">
    
    
    
    然后使用jquery和jqueryui可以打开一个对话框来显示局部视图。检查下面的示例代码

    $( ".photography-image" ).click(function() {
        e.preventDefault();
        $("<div></div>")
            .addClass("dialog")
            .appendTo("body")
            .dialog({
                close: function () { $(this).remove() },
                modal: true,
                height: 500,
                width: 500
            })
            .load("/controler/method?photographyId=" + $(this).data("imgId"));
    });
    
    $(“.photography image”)。单击(函数(){
    e、 预防默认值();
    $("")
    .addClass(“对话框”)
    .附件(“正文”)
    .对话({
    关闭:函数(){$(this).remove()},
    莫代尔:是的,
    身高:500,
    宽度:500
    })
    .load(“/controller/method?photographyId=“+$(this).data”(“imgId”));
    });
    

    谢谢

    如果你想在某些特定情况下呈现你的局部视图,那么当某些特定条件满足时,就在jquery的帮助下呈现你的局部视图。谢谢你的回答,你介意给我看一下将我的id传递给控制器的jquery吗?(顺便说一句,photo类继承自另一个类,因此它有一个id)…非常感谢您提供的示例,我将尝试让它工作,我也会回来的!大家好,我现在已经安装了JqueryUI,我现在再次尝试您的示例代码。这部分:.load(“/controller/method?photographyId=“+$(This).data(“imgId”))我假设是一个控制器?你能告诉我这个控制器方法应该是什么样子吗?当我在你的示例中添加一个警报(“hello”)时,它会显示出来,这样它就可以工作了…但是我真的希望代码将我的照片传递到对话框中。是的,它会调用控制器方法。在您的情况下,它应该是,
    .load(“/YourControlerName/EditPhoto?id=“+$(this.data)(“imgId”):)