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?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>
结果:
在我的项目中,我想从控制器向我的视图传递不止一个参数(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?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>
结果: