MVC部分视图按钮参数

时间:2017-01-10 22:02:16

标签: c# asp.net-mvc button routes partial-views

我试图在点击按钮后加载局部视图。每个按钮都有自己的commodityCode值,因此一旦点击,每个按钮都会在局部视图中生成不同的结果。

我的问题是,当点击一个按钮时,部分是唯一被返回的东西。相反,我希望将部分进一步加载到按钮所在的同一页面上。我无法使用ajax.load() Action方法,因为我作为参数传递给部分控制器的变量取自foreach(var item in Model.commodities)代码(如下所示),我不知道#39;认为有一种方法可以通过foreach循环将数据从模型传递到jQuery然后传递给控制器​​。有没有办法让我在页面上指定部分视图应该使用C#而不是jQuery加载?

@foreach (var item in Model.commodities)
{
<tr>
   <td>
     <a class="arrow_button" href='@Url.Action("TliSelect", "Commodity", new { tariff = ViewBag.scac, commodityCode = item.commodityCode })'>
          <img style="width:15px; height:15px;" src="@Url.Content("/Content/images/expand-sm.png")" />
     </a>
   </td> // Continued... 

1 个答案:

答案 0 :(得分:1)

您生成的链接将重定向到新页面。您需要使用ajax来更新当前页面,并使用TliSelect()方法返回的部分视图。

更改链接(按钮)以包含data-值的commodityCode属性,以便在脚本中存储和检索

<a class="arrow_button" href="#" data-code="@item.commodityCode">....</a>

然后你的脚本将是

var url = '@Url.Action("TliSelect", "Commodity")';
var tariff ='@ViewBag.scac';
var container = $(yourElement); // the element where you want to append the partial 
$('.arrow_button').click(function() {
    var code = $(this).data('code');
    container.load(url, { tariff: tariff, commodityCode: code });
});

或者如果您想继续附加部分内容,请将.load()替换为

$.get(url, { tariff: tariff, commodityCode: code }, function(html) {
    container.append(html);
});

请注意,这假设您的TliSelect()方法返回部分视图。