ASP.NET核心传递多个参数查看

ASP.NET Core passing more than one parameters to view

在我的项目中,我想从控制器向我的视图传递不止一个参数(id 和描述)。

这是我项目的结构:

ProductController:

public IActionResult DettaglioDescrizione(int id, string descrizione)
{
    ViewData["ProductId"] = id;
    ViewData["ProductDescription"] = descrizione;
    return View("Details");
}

Details.cshtml 视图:

<div class="text-center">
    <h1 class="display-4">Prodotti</h1>
    <p>Id prodotto: @ViewData["ProductId"]</p>
    <p>Descrizione prodotto: @ViewData["ProductDescription"]</p>
</div>

我知道我必须在 Startup.cs 中修改我的模式。如果我以这种方式修改它可以正常工作:

app.UseEndpoints(endpoints =>
{
     endpoints.MapControllerRoute(
         name: "default",
         pattern: "{controller=Home}/{action=Index}/{id?}/{descrizione?}");
});

我的问题是:有没有为每个参数添加“/”的更好方法?

模型绑定中有3个绑定源

  1. 表单值
  2. 路由值
  3. 查询字符串

您现在正在做的是来自路由值,也许您可​​以使用查询字符串 /1?description=value 或者您可以执行 httppost 并从表单中获取值。

如果您不想更改路线定义。使用查询字符串参数。如果您也不想在操作方法中使用太多参数,请使用带有 [FromQuery] 注释的自定义 class:

public class ProductController : Controller
{
    public IActionResult DettaglioDescrizione([FromRoute] id, [FromQuery] MyClassDto param)
    {
        ViewData["ProductId"] = id;
        ViewData["ProductDescription"] = descrizione;
        
        return View("Details");
    }
}

public class MyClassDto
{
    public int Description { get; set; }
}

路线定义

app.UseEndpoints(endpoints =>
{
     endpoints.MapControllerRoute(
         name: "default",
         pattern: "{controller=Home}/{action=Index}/{id?}");
});

用法:

https://localhost/Product/DettaglioDescrizione/7?Description=Hello

如果你想将多个参数从控制器传递到动作或从动作传递到controller.You可以尝试创建一个Model.Action可以用表单传递数据到controller.Actionreturns 到 view.So 的模型,你不需要通过路由或 ViewData 传递多个参数。这是一个演示:

型号:

public class Product
    {
        public int ProductId { get; set; }
        public string descrizione { get; set; }

    }

操作:

public IActionResult DettaglioDescrizione(Product product)
{
    return View("Details",product);
}

详情查看:

@model Product
<div class="text-center">
    <h1 class="display-4">Prodotti</h1>
    <p>Id prodotto: @Model.ProductId</p>
    <p>Descrizione prodotto: @Model.ProductDescription</p>
</div>

查看:

@model Product
<form method="post" asp-action="DettaglioDescrizione">
    <div class="form-group">
        <label asp-for="ProductId" class="control-label"></label>
        <input asp-for="ProductId" class="form-control" />
    </div>
    <div class="form-group">
        <label asp-for="ProductDescription" class="control-label"></label>
        <input asp-for="ProductDescription" class="form-control" />
    </div>
    <input type="submit" value="submit" />
</form>

结果: