Asp.net core 如何根据Asp.Net core上的用户选择更新视图
我希望能够显示一个表单,该表单根据点.Net核心上选择的值而变化。我见过很多东西,比如动态表单、视图组件、razor和partials,还有很多信息,但非常混乱。任何关于正确的方法做我想要的信息将非常感谢 我有类别>子类别>>产品 订单只能用于一个类别>>子类别。因此,我想显示一个选择,并根据用户为新订单选择的类别,显示我必须显示的产品。因此,我不想选择用户选择,然后返回控制器,再返回视图,等等。我希望能够根据用户选择动态显示数据 这里是一段代码的摘录,只是为了简单地了解我在做什么。我不是像产品一样粘贴类Asp.net core 如何根据Asp.Net core上的用户选择更新视图,asp.net-core,Asp.net Core,我希望能够显示一个表单,该表单根据点.Net核心上选择的值而变化。我见过很多东西,比如动态表单、视图组件、razor和partials,还有很多信息,但非常混乱。任何关于正确的方法做我想要的信息将非常感谢 我有类别>子类别>>产品 订单只能用于一个类别>>子类别。因此,我想显示一个选择,并根据用户为新订单选择的类别,显示我必须显示的产品。因此,我不想选择用户选择,然后返回控制器,再返回视图,等等。我希望能够根据用户选择动态显示数据 这里是一段代码的摘录,只是为了简单地了解我在做什么。我不是像产品
public class OrderCreateViewModel
{
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<Branch> Branches { get; set; }
public int BranchId { get; set; }
public int CategoryId { get; set; }
}
公共类OrderCreateViewModel
{
公共IEnumerable类别{get;set;}
公共IEnumerable分支{get;set;}
公共整数{get;set;}
public int CategoryId{get;set;}
}
控制器:
[HttpGet]
public IActionResult Create()
{
//Create vm
IEnumerable<Branch> branchList = _branchDataService.GetAll();
IEnumerable<Category> categoryList = _categoryDataService.GetAll();
OrderCreateViewModel vm = new OrderCreateViewModel
{
Categories = categoryList,
Branches = branchList
};
return View(vm);
}
[HttpGet]
public IActionResult Create()
{
//创建虚拟机
IEnumerable branchList=_branchDataService.GetAll();
IEnumerable categoryList=_categoryDataService.GetAll();
OrderCreateViewModel vm=新的OrderCreateViewModel
{
类别=类别列表,
分支=分支列表
};
返回视图(vm);
}
视图:
@model OrderCreateViewModel
创建新订单
选择类别
选择分支
我只是在视图侧填充选择,并根据用户选择的内容,显示我想要显示的产品。我还没有通过产品列表,因为我不知道该特定类别的“过滤器”发生在哪里。
希望你能理解我需要什么:)你有两个选择: #1使用局部视图和AJAX获取数据 去看看下面的链接,它准确地描述了你想要实现的目标 #2使用Javascript填充第二个选择:
- 首先,当页面加载时,您需要保存数据
@{
<text>
<script>
var data = "@Newtonsoft.Json.JsonConvert.SerializeObject(Model)";
</script>
</text>
}
@{
var data=“@Newtonsoft.Json.JsonConvert.SerializeObject(Model)”;
}
- 接下来在分支选择器上使用更改时事件:
<script>
(function ()
{
var sltBranch = document.getElementsByName("BranchId")[0];
var sltCat = document.getElementsByName("CategoryId")[0]
sltCat.onchange = function () {
var dataAsObj = JSON.parse(data);
var branches = "";
for (i = 0; i < dataAsObj.Branches.length; i++)
{
if (dataAsObj.Branches[i].CategoryId == sltCat.value)
{
branches += "<option value='" + dataAsObj.Branches[i].BranchId + "'>" + dataAsObj.Branches[i].BranchName + "</option>"; //Whatever The branch name may be
}
}
sltBranch.innerHTML = branches;
}
}
)(document, window);
</script>
(功能()
{
var sltBranch=document.getElementsByName(“BranchId”)[0];
var sltCat=document.getElementsByName(“CategoryId”)[0]
sltCat.onchange=函数(){
var dataAsObj=JSON.parse(数据);
var=”;
对于(i=0;i
不过,我建议您遵循选项1,因为这是一种更加经得起未来考验的策略。这意味着您需要更改视图模型等,但如果您计划广泛使用此策略,则需要使用选项1之类的使其更加健壮
祝你好运-编码愉快。你好,我很想帮助你-但我们需要更多信息。您需要展示一个您试图在代码中实现的示例。此外,请更具体地说明您希望表单如何更改。是否要显示新表单或获取与在“选择”对话框中选择的内容相关的数据一般来说,由于缺乏信息和价值,这样的问题是不受欢迎的。添加更多信息,这样这个问题可以在将来帮助社区。非常感谢,问题已编辑,如果需要更多详细信息,请告诉我。回到holydays,我已经尝试并工作了!我遵循了链接,但通过使用ajax填充下拉列表解决了这个问题。干杯
<script>
(function ()
{
var sltBranch = document.getElementsByName("BranchId")[0];
var sltCat = document.getElementsByName("CategoryId")[0]
sltCat.onchange = function () {
var dataAsObj = JSON.parse(data);
var branches = "";
for (i = 0; i < dataAsObj.Branches.length; i++)
{
if (dataAsObj.Branches[i].CategoryId == sltCat.value)
{
branches += "<option value='" + dataAsObj.Branches[i].BranchId + "'>" + dataAsObj.Branches[i].BranchName + "</option>"; //Whatever The branch name may be
}
}
sltBranch.innerHTML = branches;
}
}
)(document, window);
</script>