【问题标题】:List object ID value bind with dialog modal property列表对象 ID 值与对话框模式属性绑定
【发布时间】:2016-01-29 07:23:23
【问题描述】:

我有以下列表视图

单击Reject 后,我刚刚配置为打开一个模态对话框,如下所示

所以一旦我提交了这个模态对话框,我想将模态值提交给方法以将其保存在数据库表中。

这是相关的模型类

    public class ProductViewModel
    {
        public AB_Product Products { get; set; }
        public IEnumerable<AB_Product> LProducts { get; set; }
    }

    public partial class AB_Product
    {
        public string ProductID { get; set; }
        public string ApprovalStatus { get; set; }
        public string ReasonEn { get; set; }
        public string ReasonAr { get; set; }
    }

这是查看页面代码

@model project_name.Models.ProductViewModel

<table class="table">

    <tr>
        <th>
            Name
        </th>
        <th>
            Action
        </th>
    </tr>

    @foreach (var obj in Model.LProducts)
    {
        <tr>
            @Html.HiddenFor(modelItem => obj.ProductID)

            <td>
                @Html.DisplayFor(modelItem => obj.ProductTitleEn)
            </td>

            <td>

                <div class="btn-group btn-group-sm" id="CreateButton">
                    <button type="button" class="btn btn-default" onclick="location.href='@Url.Action("Create")';return false;">View Product</button>
                </div>

                @if (obj.ApprovalStatus == "Pending")
                {
                    <div class="btn-group btn-group-sm" id="ApproveButton">
                        <button type="button" class="btn btn-success" onclick="location.href='@Url.Action("Change_Product_State","Home", new { productid = obj.ProductID, value = "Approved" },null)';return false;">Approve</button>
                    </div>

                    <div class="btn-group btn-group-sm" id="RejectButton">
                        <button type="button" id="modal-opener" class="btn btn-danger" return false;">Reject</button>
                    </div>

                }

                <div class="btn-group btn-group-sm" id="CreateButton">
                    <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("Create_ProductComments","Home", new { productid = obj.ProductID }, null)';return false;">Add Comments</button>
                </div>

            </td>

        </tr>
    }

</table>


<div id="dialog-modal" title="Basic modal dialog">
    @using (Ajax.BeginForm("Change_Product_State", "Home", new { value = "Rejected" }, new AjaxOptions { UpdateTargetId = "ID", OnSuccess = "onSuccess" }))
    {
        <div>
            <fieldset>
                <legend>Account Information</legend>

                <div class="editor-label">
                    @Html.LabelFor(m => m.Products.ReasonEn)
                </div>

                <div class="editor-field">
                    @Html.TextAreaFor(m => m.Products.ReasonEn)
                    @Html.ValidationMessageFor(m => m.Products.ReasonEn)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(m => m.Products.ReasonAr)
                </div>

                <div class="editor-field">
                    @Html.TextAreaFor(m => m.Products.ReasonAr)
                    @Html.ValidationMessageFor(m => m.Products.ReasonAr)
                </div>

                <p>
                    <input type="submit" value="Submit" />
                </p>

            </fieldset>
        </div>
    }
</div>


@section Scripts
{

<script>
        $(function () {
            $("#dialog-modal").dialog({
                autoOpen: false,
                width: 400,
                height: 400,
                show: {
                    effect: "blind",
                    duration: 1000
                },
                hide: {
                    effect: "explode",
                    duration: 1000
                }
            });

            $("#modal-opener").click(function () {
                 $("#dialog-modal").dialog("open");
            });
        });

        function onSuccess() {
            $("#dialog-modal").dialog("close");
        }
</script>

}

如何将我单击的列表对象(ProductID)与m.Products.ProductID绑定

【问题讨论】:

  • 您的意思是要将ProductID 传递给模态框,以便在您提交表单时可以发布它?
  • 是的,就是这样,一旦我提交ProductID 为空
  • 将很快添加答案(您有很多无效的 html 也需要修复)
  • 如果你能指导,我想修复

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


【解决方案1】:

foreach 循环和Ajax.BeginForm() 添加中删除@Html.HiddenFor(modelItem =&gt; obj.ProductID)

@Html.HiddenFor(m => m.Products.ProductID)

所以它的值可以被发布。然后将ProductID 的值添加为按钮的data- 属性(并将id 更改为class - 请参阅下面的注释)

<button type="button" class="modal-opener btn btn-danger" data-id="@obj.ProductID">Reject</button>

并将脚本修改为

$(".modal-opener").click(function () { // use class name
    $('#Products_ProductID').val($(this).attr("data-id")); // set the value of the hidden input
    $("#dialog-modal").dialog("open");
})

请注意,由于 foreach 循环生成的 id 属性重复,您有很多无效的 html。改用类名。你的 html 应该是

@foreach (var obj in Model.LProducts)
{
    <tr>
        <td>@Html.DisplayFor(modelItem => obj.ProductTitleEn)</td>
        <td>
            <div class="btn-group btn-group-sm CreateButton"> // change
                <button type="button" class="btn btn-default" onclick="location.href='@Url.Action("Create")';return false;">View Product</button>
            </div>
            @if (obj.ApprovalStatus == "Pending")
            {
                <div class="btn-group btn-group-sm ApproveButton"> // change
                    <button type="button" class="btn btn-success" onclick="location.href='@Url.Action("Change_Product_State","Home", new { productid = obj.ProductID, value = "Approved" },null)';return false;">Approve</button>
                </div>
                <div class="btn-group btn-group-sm RejectButton"> // change
                    <button type="button" class="modal-opener btn btn-danger" data-id="@obj.ProductID">Reject</button> // as above
                </div>
            }
            <div class="btn-group btn-group-sm CreateButton"> // change
                <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("Create_ProductComments","Home", new { productid = obj.ProductID }, null)';return false;">Add Comments</button>
            </div>
        </td>
    </tr>
}

【讨论】:

  • button 可以有两个类吗?在你的答案中有两个类
  • 哎呀 - 不,不能 - 将更新答案(但是(以前的)id 属性的目的是什么?
  • ProductID 需要将这些原因值保存在另一个表中,另一个问题,为什么我选择 class 而不是 ID 点击?
  • $(".modal-opener").click 而不是 $("#modal-opener").click ?
  • 因为它的无效 html 具有重复的 id 属性(并且在许多情况下会导致引用 id 的任何 javascript/jquery 失败)。是的,它必须是$(".modal-opener").click(...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2017-05-25
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多