ASP MVC-编辑器模板问题(总是从第一个模板发送数据)

本文关键字:第一个 数据 编辑器 MVC- 问题 ASP | 更新日期: 2023-09-27 17:57:29

我有一个表单/视图,它表示一个包含简单属性和IEnumerable属性的强类型模型。我为我的模型的IEnumerable属性使用了一个编辑器模板。

for (int i = 0; i < @Model.Items.Count(); i++)
                    {
                        @Html.EditorFor(model => @Model.Items[i])
                    }

现在,模板如下所示:

 @using (Html.BeginCollectionItem("Items"))
{
            <table style="width: 100%">
                <tr>      
                <td>
                    @Html.TextBoxFor(model => @Model.ID, new {id = "ID" })
                </td>
                <td>
                    @Html.TextBoxFor(model => @Model.Description, readonly="readonly", new {id = "Description" })
                </td>
                <tr />
                         <a role="button" id=getDescBtn>
                    </a>
            </table>
}

我的模板脚本:

<script type="text/javascript">
$(document).ready(function() {
    $("#getDescBtn").on('click', function (event) {
        $.ajax({
            url: '@Url.Action("LoadDescription")',
            async: false,
            cache: false,
            data: {id: $("#ID").val()}
    }).success(function (partialView) {
        });
    });
});

现在,我的控制器动作看起来像:

public ActionResult LoadDescription(string id)
    {}

现在,假设我有两个模板:在第一个中,ID文本框包含值"1"。在第二个文本框中,ID文本框包含值"2"。

当我按下第一个模板中的按钮时,我会两次进入控制器操作,两次的值都是"1"(来自第一个模板)。当我按下第二个模板中的按钮时,我会进入控制器动作一次,值为"1"(来自第一个模板,尽管我按下了第二个模版的按钮)。

现在,我试图实现的逻辑非常简单:按下第一个模板中的按钮,获得值为"1"的控制器动作一次。

按下secondtemplate中的按钮,进入控制器动作一次,值为"2"。

此外,控制器中的动作负责计算描述值,然后填写描述字段。操作方法应该返回什么(我认为我不应该为整个表单执行post),以及在使用Ajax时如何在success函数中接收它?谢谢你的帮助。

ASP MVC-编辑器模板问题(总是从第一个模板发送数据)

我认为您需要为按钮和编辑器使用类,而不是id。在代码中,您有多个Id为Id的文本框和Id为getDescBtn的多个按钮。因此,$("#ID").val()只会给您第一个ID为"ID"的元素的值,这是您的第一个文本框。

至于更新描述,您可以让您的操作返回描述值,然后在ajax调用成功时设置描述文本框。

@using (Html.BeginCollectionItem("Items"))
{
        <table style="width: 100%">
            <tr>      
            <td>
                @Html.TextBoxFor(model => @Model.ID, new {@class = "ID" })
            </td>
            <td>
                @Html.TextBoxFor(model => @Model.Description, readonly="readonly", new {@class = "Description" })
            </td>
            <tr />
                     <a role="button" class="getDescBtn">
                </a>
        </table>
}
<script type="text/javascript">
$(document).ready(function() {
$(".getDescBtn").on('click', function (event) {
    $.ajax({
        url: '@Url.Action("LoadDescription")',
        async: false,
        cache: false,
        data: {id: $(this).parent().find(".ID").val()}
     })
    .success(function (data) {
     $(this).parent().find(".Description").val(data.description )
    });
});
});
public JsonResult LoadDescription(string id)
{
//your logic here
return Json(new {description )});
}   
相关文章: