- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在 ViewComponent
(ViewComponent1) View 中编码。在此 View 中,我列出了一些项目:
如您所见, channel 11、12、13 和 14 是可点击的。每个 channel 都有一些附加信息(OBIS、avtalsid 等)。我想做的是在 ViewComponent1 中调用 ViewComponent2,并根据单击的项目传递一些数据。
我尝试做的是创建另一个名为“Test”的 View
并在该 View
中调用 ViewComponent2 及其参数,如下所示:
<div class="row">
<div class="col-md-2 canalstyle">
<a asp-controller="Customer" asp-action="Test" asp-route-pod="@item.STATION"
asp-route-idnr="@item.IDNR" asp-route-kanal="@item.KANAL" asp-route-start="@Model.start"
asp-route-end="@Model.end"> @Html.DisplayFor(modelItem => item.KANAL)</a>
</div>
</div>
这行得通,但此方法将我重定向到当前的 View
(ViewComponent 1)。我不想要那个。我希望当前 View 从 ViewComponent2 加载附加信息。
我运行 ajax 的函数:
function myFunction() {
var data = JSON.stringify({
'idnr': id,
'start': this.start,
'end': this.end
});
$.ajax({
url: '@Url.Action("Test2","Customer")',
type: 'GET',
data: { idnr: id, start: this.start, end: this.end },
contentType: 'application/json',
success: handleData(data)
})
};
function handleData(data) {
alert(data);
var url = $(this).attr("href");
var $target = $(this).closest("div").find(".details");
$.get(url, function (res) {
$target.html(res);
});
//do some stuff
}
还有我的 Test2 Action :
public async Task<IActionResult> Test2(string idnr, string start, string end)
{
ServiceClient r2s = new R2S.ServiceClient();
R2S.Konstant[] kData = r2s.GetKonstantListAsync(new string[] { "IDNR" }, new string[] { idnr}).Result; // mätarnummer in... --> alla konstanter kopplade till denna.
return ViewComponent("MeterReader2", new { k = kData[0], start = start, end = end });
}
我正在尝试以相同的 DOM 为目标。有什么想法吗?
最佳答案
您当前的代码正在呈现链接(a 标签),通常单击链接会执行一个新的 GET 请求,这就是您所看到的,重定向到新的操作方法。
如果你不想重定向,但想在同一个 View 中显示第二个 View 组件的结果,你应该使用 ajax。
例如,如果您想在每个链接下方显示第二个 View 组件的结果,您可以为此添加另一个 html 元素。我在这里添加一个空的 div。
<div class="row">
<div class="col-md-2 canalstyle">
<a class="myClass" asp-controller="Customer" asp-action="DetailsVc"
asp-route-id="@item.Id" > @item.KANAL</a>
<div class="details"></div>
</div>
</div>
在这里,我只是删除了您在原始问题中拥有的所有那些路由参数,并仅替换为 on param (id
) 。假设您的项目将有一个 Id
属性,它是记录的唯一 ID(主键),您可以使用它在 View 组件中获取实体(从数据库左右)以获取详细信息.
这将生成与 css 类 myClass
的链接。你可以看到,我使用 asp-action
属性值作为“DetailsVc”。我们不能直接使用 link 标签助手中的 View 组件名称作为属性值来生成 href
值。所以我们应该创建一个包装器操作方法,它返回您的 View 组件结果,如下所示
public IActionResult DetailsVc(int id)
{
return ViewComponent("DetailsComponent", new { id =id });
}
假设您的第二个 View 组件名称是 DetailsComponent
并且它接受一个 id
参数。根据需要更新此操作方法和 View 组件的参数列表。 (但我建议只传递唯一的 Id 值并再次在服务器代码中获取详细信息)
现在您所要做的就是编写一些 javascript 代码来监听那些 a 标签上的 click
事件并阻止正常行为(重定向)并改为进行 ajax 调用,使用 ajax 调用结果更新点击链接旁边的详细信息 div。
你可以把这段代码放在你的主视图中(或者放在没有@section
部分的外部js文件中)
@section Scripts
{
<script>
$(function() {
$("a.myClass").click(function(e) {
e.preventDefault();
var url = $(this).attr("href");
var $target = $(this).closest("div").find(".details");
$.get(url,function(res) {
$target.html(res);
});
});
});
</script>
}
关于javascript - 在另一个 ViewComponent 中调用一个 ViewComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864479/
我目前正在 ViewComponent (ViewComponent1) View 中编码。在此 View 中,我列出了一些项目: 如您所见, channel 11、12、13 和 14 是可点击的。
我正在尝试使用 ViewComponents.InvokeAsync() 功能,但不知何故这根本不是异步的。它正在等待组件代码呈现。 http://docs.asp.net/en/latest/mvc
我想在 asp.net core MVC(mvc6?)项目中搜索所有可用 ViewComponents 的列表,类似这样。 ViewComponent 的 Default.cshtml foreac
我正在创建一组表示不同 View 过滤器的 View 组件。到目前为止它们工作得很好,但我不明白我正在经历的这种行为。 如果我使用声明两个 InvokeAsync: public async Task
我已经将我的 asp.net 核心 Web 应用程序从 1.0.1 更新到 1.1.0,但是我的 View 组件的标签助手不工作: 它输出标签。它使用旧语法工作:@await Component.I
我有一个客户 View 模型,其中包含用于选择国家、地区和语言的下拉列表。我正在使用 ViewComponent 为下拉菜单加载必要的数据,它的工作非常顺利。我的问题是,当它们是页面上的多个客户端模型
我在 Startup.cs 中注册缓存服务如下: public void ConfigureServices(IServiceCollection services) {
我在点击 Ajax 事件时遇到问题,多次触发 Controller 操作/ViewComponent。 我在单击按钮时使用 Ajax 来调用 Controller 操作,它将一些数据插入数据库,然后重
我正在编写一个自定义 TagHelper 并希望在其中呈现一个 ViewComponent。 类似于 vc:xyz 标记助手所做的事情,但以一种更可控的方式,以便我可以在运行时确定要渲染哪个 View
我目前有这个看法: 但是每当我向购物车添加东西时,它都不会自动更新计数。仅当我刷新页面时。 我怎样才能让它自动更新?它在 _Layout View 上带有一个 View 组件。 购物车 View 组件
我有一个 View 组件,其中包含一些嵌入到各个页面中的可重用业务逻辑。这一直运作良好。但是,我现在需要使用 ajax 刷新 View 组件。 有什么办法可以实现这一点吗?据我所知,这是不可能的,尽管
如何在Asp.Net Core中为ViewComponent使用AJAX?即调用方法 @Component.Invoke("ComponentName", SomeData); ViewCompone
我正在为 MVC .NET Core Web 应用程序使用最新的 VS.2017 更新和模板。我决定将 ViewComponents 放在外部程序集中,因为我读了几篇文章,这些文章表明如果没有奇怪的技
我尝试使用 javascript 调用 ViewComponent 来促进页面加载,现在我使用 razor 调用 ViewComponent 但页面加载时间很长,怎么办? 这是 Controller
ViewComponent 是通过传入的参数从 View 调用的。 @await Component.InvokeAsync("StudentDetails", new { id = 1 }); 在
我有一个包含几个 View 组件的网页,当我单击这些组件时,我会为其打开一个简单的编辑器,请参见下图。如果我编辑文本并按回车键,我想重新呈现 View 组件而不是漏洞页面。是否可以使用 javascr
在以下方法中,我收到了警告:此异步方法缺少“await”运算符,将同步运行。在此方法中,我可以在哪里使用 await? 注意:此方法返回一个简单的静态 View ,无需与数据库等交互。 public
在ViewComponent对象中,HttpContext和User是只读属性。 如何对这样的组件进行单元测试? 我正在使用 MSTest Freamwork。 我的代码中使用了以下属性 cookie
我要包装这个: 进入可重用的 ViewComponent,其中属性将是参数: 我能够将 asp-for 作为参数传递给 View 组件: public class EditorViewCompon
引用 Viewcomponent alternative for ajax refresh .我无法在 MVC6 中刷新 ajax。 JavaScript 容器找到 Div 值,但数据未更新。任何想法
我是一名优秀的程序员,十分优秀!