javascript - 如何轻松地从 MVC 中的复选框附加数据?

标签 javascript jquery asp.net ajax asp.net-mvc

我想在选中复选框时将 HTML/数据附加到 div。我还想知道如何从复选框轻松附加 data/html 的最佳实践。

但是,请参阅下面的代码:

Ajax

 $('.myCheck').on('ifChecked', function (event) {
    $.ajax({
        url: '/Home/getCategoryItems',
        type: "GET",
        cache: false,
        data: {
            name: $(this).attr("name")
        },
        success: function (data) {
            setTimeout(function () {


            }, 3000);
        }
    });
});

查看:

 @foreach (var item in Model.Cars)
  {
                <span class="label">
                    @item.CategoryName <span class="badge">@item.CategoryCount</span>
                </span>
                            @Html.CheckBox(item.CategoryName, new { @class = "myCheck", })
                            @Html.Hidden("name", item.CategoryName, new { id = item.CategoryId })
}




Controller:

    [HttpGet]
    public JsonResult getCategoryItems(string name)
    {
        var select = (from r in _db.Cars             
                      where r.Category.Name == name
                      select new
                      {
                          r.Title,
                          r.Price,
                          r.FileName,
                          r.Category.Name,
                          r.City,
                          r.TagName,
                          r.Id,
                          }).ToList();
        return new JsonResult { Data = select, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

这是我要附加的内容:

@foreach (var item in Model)
    {
        <div class="container" id="sek1">
            <div class="row">

                <div class="col-md-12 no-padding-lr sear-result-column">
                    <div class="latest-job article-row1">
                        <div class="col-md-2 no-padding-lr resp-grid1 box-sadow">
                            <img src="https://wp-themes.com/wp-content/themes/jobile/images/no-image.jpg" width="100" height="86">

                        </div>

                        <div class="col-md-10 no-padding-lr">
                            <div class="col-md-8 col-sm-8 col-xs-8 no-padding-lr job-status resp-grid1 job-status-3">

                                <h3>@item.Title</h3>
                            </div>
                            <div class="col-md-4 col-sm-4 col-xs-4 job-status resp-grid1 job-status-3">
                                <a class="btn btn-primary" id="LesMerBtn">@item.Price</a>
                            </div>
                            <div class="col-md-12 no-padding-lr">
                                <div class="job-btn-group late-job-btn clearfix">

                                    <a href="" rel="category" class="person-post"><span class="glyphicon glyphicon-map-marker"></span>@item.City</a>

                            <a href="" rel="category" class="person-post"><span class="glyphicon glyphicon-list-alt"></span>Kategori: @item.CategoryName</a>

                        </div>
                    </div>
                    <div class="col-md-12 no-padding-lr">
                        <p class="result-btm-text"></p><p>Test....</p>
                        <a href="" class="color-068587"><span class="glyphicon glyphicon-eye-open" id="eye-open"></span>Read more</a><p></p>

                    </div>
                </div>


            </div>
        </div>


    </div>
</div>

    }

最佳答案

您将在 ajax 调用的 success 事件中获得 json 响应。响应是一个数组,您需要迭代该数组并获取数组中的每个项目,读取属性值并使用它来构建要附加的 html 标记。

success: function (data) {
   var myHtml="";
   $.each(data,function(a,b){
                               myHtml+="<div><p>"+b.Title+"</p>";
                               myHtml+="<p>"+b.City+"</p>";
                               myHtml+="<p>"+b.Price+"</p></div>";
   });
   $("#YourDivId").append(myHtml);
}

假设 YourDivId 是您想要显示来自 ajax 调用的数据的 Div 的 ID,并且该 div 存在于您的页面中。

如果您正在制作简单的 html 标记,则此方法有效。但如果您有一些复杂的标记,您想要附加/显示。我建议从 ajax 调用中返回部分 View 。

因此,在您的操作方法中,不要返回 json 数据,而是将该数据传递到您的分部 View ,并让操作方法返回 razor 生成的带有数据的 html 标记。

假设您有一个像这样的 View 模型来代表一辆汽车

public class CarVm
{
  public string Title { set;get;}
  public decimal Amount { set;get;}
  public string City { set;get;}
}

在操作方法中,根据数据库表中的数据创建 CarVm 列表,并将其传递给分部 View 。

[HttpGet]
public JsonResult getCategoryItems(string name)
{
    var carVmList= (from r in _db.Cars             
                  where r.Category.Name == name
                  select new CarVm { Title =r.Title,
                                     City =r.City,
                                     Price=r.Price
                                   }
                 ).ToList();
    return PartiaView("CarsPerCategory",carVmList);
}

假设您有一个名为 CarsPerCategory.cshtml 的部分 View ,它强类型化为 CarVm 类型的集合。部分 View 应存在于 ~/Views/Shared/~/Views/YourCurrentControllerName/

@model List<CarVm>
@foreach (var item in Model)
{
  <p>@item.Title</p>
  <!-- Add the remaining markup you want (same as the code in your question) -->
}

在成功事件中,您只需将返回的响应附加到容器 div 即可。

success: function (data) {
  $("#YourDivId").append(data);
}

您可以使用 append() 方法或 html() 方法,具体取决于您想要替换现有值或仅附加它。

关于javascript - 如何轻松地从 MVC 中的复选框附加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35706582/

相关文章:

javascript - 在 Highcharts 中,将小选区放大到边缘,当 Zoomtype = x 时会同时缩放 x 和 y

javascript - 如何在浏览器选项卡处于焦点时运行 setInterval?

javascript - jquery 如何在某个事物 == true 时中断循环函数?

jquery - 是否可以将我的页面格式保持为纵向模式(移动设备)

javascript - Datatables.net 渲染和应用分页速度慢

javascript - 地球轨道模拟速度不正确

javascript - 在 Rails 中获取没有指纹的 Assets url

javascript - 用 jquery 函数替换 document.getElementById?

javascript - 如何从asp.net源代码调用bootstrap选项卡

c# - 使用 System.DirectoryServices.xxx 是否可以确定用户可以管理哪些 AD 组?