RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1438889
Accepted
user511657
user511657
Asked:2022-08-13 06:02:30 +0000 UTC2022-08-13 06:02:30 +0000 UTC 2022-08-13 06:02:30 +0000 UTC

如何按字符串发送和过滤数据

  • 772

我想通过 url 行显示产品信息。在此处输入图像描述

我假设我需要向服务器发送一个字符串,然后将过滤后的数据按字符串发送回客户端。实际上,我试图实现它,但它不起作用。服务器控制器:

 private readonly DataContext _context;
    private List<Clothes> vendor;
    public ProductVendorController(DataContext context)
    {
        _context = context;
    }

    
    [HttpGet]
    public async Task<ActionResult> GetClothesUrl()
    {
        return Ok( vendor.ToList());
    }
    
    [HttpPost]
    public async Task<ActionResult> GetVendorClothes(string data)
    {
        var find = (from dadsa in _context.Clothes.Where(p => p.VendorCode == data)
                select dadsa
            ).ToListAsync();
        vendor = await find;
        return Ok();
    }

服务:

  public VendorFind(Vendor: string): Observable<string> {

        return this.http.post<string>(
          `${environment.apiUrl}/${this.urlVendor}`,
          Vendor
        );
      }
      public VendorFindGet():Observable<Clothes>{
          return this.http.get<Clothes>(
            `${environment.apiUrl}/${this.urlVendor}`);
    
        }

零件:

 VendorCode:string = "";
  private subscription: Subscription;
  constructor(private clothesService:ClothesServiceService,private activateRoute: ActivatedRoute) {
    this.subscription = this.activateRoute.params.subscribe(params => this.VendorCode = params['VendorCode'] );
  }
  vendorUpdated = new EventEmitter<string>();
  info:any = new Clothes;
  ngOnInit(): void {
    this.clothesService
      .VendorFind(this.VendorCode)
      .subscribe((vendor: string) => this.vendorUpdated.emit(vendor));
    this.clothesService
      .VendorFindGet()
      .subscribe((result:Clothes)=>(this.info = result));
      console.log("vendor",this.VendorCode);
      console.log("info",this.info);


  }

路由模块:

 { path: 'Clothes/Product/:VendorCode', component: ProductPageComponent }

一个示例 HTML 组件:

<h1>{{info.name}}</h1>
<span>Артикул: {{info.vendorCode}}</span>
<h1>Цена: {{info.price}}.</h1>

UPD:正面:

{ path: 'Clothes/Product/:VendorCode', component: ProductPageComponent}

后端:

app.MapControllerRoute(
    name: "ProductVendor",
    pattern: "{controller =  ProductVendor}/{action}/{id?}");

UPD 2:实际上,在产品选项卡上,当用户点击查看或输入带有文章的url时,会加载产品页面,该页面是从数据库中获取的。

产品标签: 在此处输入图像描述

产品页面: 在此处输入图像描述

asp.net-core angular
  • 1 1 个回答
  • 92 Views

1 个回答

  • Voted
  1. Best Answer
    Виталий Шебаниц
    2022-08-14T05:51:40Z2022-08-14T05:51:40Z

    让我们从服务器端的操作开始。

    [HttpPost]
    // обычно пишут так, чтобы в строке можно было передать [HttpPost({id})]
    // и еще для получения данных рекомендуется использовать метод GET
    public async Task<ActionResult> GetVendorClothes(string data)
    {
        // здесь ен вижу смысла с асинхронности, но да ладно
        var find = (from dadsa in _context.Clothes.Where(p => p.VendorCode == data)
                select dadsa
            ).ToListAsync();
        // почему бы не использовать FirstOrDefault вместо Where... вам же нужно одну запись найти
        vendor = await find;
        // ну и последняя проблемаю...Вы данные отобрали, но не возвратили их
        return Ok();
    }
    

    重写并获取

    [HttpGet("{id}")]
    public async Task<ActionResult> GetVendorClothes(string id)
    {
        var finder = _context.Clothes.FirstOrDefault(f => f.VendorCode == id);
        return new JsonResult(finder);
    }
    

    现在我们可以通过请求 http://localgost:1111/api/{controller}/getVendorClosest/{id} 获取对象

    仍然需要为这个请求重新制作 Angular 服务(也许路由需要受 id 影响),所以你应该赚取加减。给女士们的唯一建议是将数据存储在服务中,然后在 html 中通过 async 管道获取...如果您不知道该怎么做,请写,我会补充答案

    更新

    让我们继续讨论客户端。

    我们将创建模型,我们将在后面和前面工作

    // интерфейс для данных с бэка
    export interface BClothes {
       ClothesId: number;
       VendorCode: string;
       Name: string;
       Image: string;
       Amount: number;
       Price: number;
    }
    
    // класс для фронта. Класс для того, чтобы задавать конструктор для меньшего количества кода
    export class FClothes {
       clothesId: number;
       vendorCode: string;
       name: string;
       image: string;
       amount: number;
       price: number;
    }
    

    服务(需要实现业务逻辑)

    @Injectable()
    export class ClothesService {
       // тут храню полученные данные, теперь чтобы получить данные в любом компоненте, нужно всего лишь забрать этот сервис
       clothes: BehaviorSubject<Array<FClothes>> = new BehaviorSubject<Array<FClothes>>([]);
       constructor(private httpClient: HttpClient){}
       
       // этот метод получает весь список, в аргументе обычно пихают пэйджинг или фильтра
       getClothesList(): void {
         this.httpClient
            .get<Array<BClothes>>("link")
            .pipe(
               // забочусь об отписании подписки после выполнения запроса
               take(1)
            )
            .subscribe((res: Array<BClothes>) => {
               // записываю результат
               this.clothes.next(res.map(m => ({
                   clothesId: m.ClothesId;
                   vendorCode: m.VendorCode;
                   name: m.Name;
                   image: m.Image;
                   amount: m.Amount;
                   price: m.Price;
               })));
             });
       }
    
       // теперь получается что у меня есть все данные, и они хранятся в известой мне переменной, и при желании я могу их использовать. 
       // Обычно дополнительный метод по получению инфы по id или еще чему-то делается для следующего: 
       // 1. В общей таблицы зачастую не за чем светить много информации дабы не перегружать UX 
       // 2. Ну и скорось работы тоже никто не отменял. 
       // Поэтому, когда гружу общий список, то гружу не все поля по каждому объекту, а часть. 
       // И потом, когда проваливаюсь в конкретный объект, то уже дополучаю все данные.
       getClothesById(id: string): Observable<FClothes>{
          return this.gttpClient
             .get<BClothes>(`link/${id}`)
             .pipe(
                map((m: BClothes) => ({
                   clothesId: m.ClothesId;
                   vendorCode: m.VendorCode;
                   name: m.Name;
                   image: m.Image;
                   amount: m.Amount;
                   price: m.Price;
                })),
                take(1)
             )
       }
    }
    

    好吧,那么显示的那一刻......我们的组件(页面本身)

    @Component({
       ...
       providers: [ClothesService]
    })
    export class ClothesComponent implements OnInit {
       clothes: Observable<Array<FClothes>>;
       constructor(private clothesService: ClothesService){
          this.clothes = this.clothesService.clothes;
       }
    
       ngOnInit(): void {
          this.clothesService.getClothesList();
       }
    
       showDetails(selected: FClothes): void {
          // открыть компонент (к примеру модалку)
          // и в ней сделать запрос на получение по id
       }
    }
    

    好了,现在html

    <div class="clothes_container">
       <table>
          <thead>
             <tr>
                <th>Названи</th>
                <th>Кол-во</th>
                <th>Цена</th>
                <th></th>
             </tr>
          </thead>
          <tbody>
             <tr *ngFor="let cl of clothes | async">
                <th>{{cl.name}}</th>
                <th>{{cl.amount}}</th>
                <th>{{cl.price}}</th>
                <th>
                   <button (click)="showDetails(cl)">Подробнее</button>
                </th>
             </tr>
          </tbody>
       </table>
    <div>
    
    • 1

相关问题

  • Asp 网络核心网络 API。EF Core 不跟踪实体更改

  • ASP Net Core - 无法到达端点

  • 停止 Ubuntu Aws 上的用户会话

  • 无法将角度材料添加到项目中

  • ASP.NET Core 3.1 中的指标。在里面收集什么以及如何捡起它们?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5