Asp.net mvc 按钮点击事件的MVC等价物
MVC5 EF6 我已经启动了一个MVC应用程序,一切都进展顺利——创建/编辑/删除视图都很顺利 我已经到了“标准”@Html.TextBoxFor//@Html.EditorFor etc可以满足我的需要的地步 我正在创建一个具有类别的产品。大约有10个父类别,每个类别可以有多个子类别,每个子类别可以有多个子类别等等。因此,标准控件不能提供良好的用户体验-脚手架代码有一个组合框 我已经实现了一个模式,它在一个“树视图”中显示所有类别-它实际上是嵌套的。e、 g.但我在每个树节点上都有一个按钮,树是动态生成的:Asp.net mvc 按钮点击事件的MVC等价物,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,MVC5 EF6 我已经启动了一个MVC应用程序,一切都进展顺利——创建/编辑/删除视图都很顺利 我已经到了“标准”@Html.TextBoxFor//@Html.EditorFor etc可以满足我的需要的地步 我正在创建一个具有类别的产品。大约有10个父类别,每个类别可以有多个子类别,每个子类别可以有多个子类别等等。因此,标准控件不能提供良好的用户体验-脚手架代码有一个组合框 我已经实现了一个模式,它在一个“树视图”中显示所有类别-它实际上是嵌套的。e、 g.但我在每个树节点上都有一个按钮,
@helper TreeView(ICollection<Heisenberg.Models.Category> categoryTree)
{
foreach (var item in categoryTree)
{
<li>
@if (item.Category1.Count > 0)
{
@Html.ActionLink(@item.CategoryID.ToString(), "SelectCategory", new { id = @item.CategoryID })
<ul>
@TreeView(item.Category1)
</ul>
}
else
{
@Html.ActionLink(@item.CategoryID.ToString(), "SelectCategory", new { id = @item.CategoryID })
}
</li>
}
}
这显然行不通。categoryID通过ok但返回视图(产品)代码>出错-它试图将我发送到一个不退出的位置,我只想返回到产品创建页面,其中产品模型包含我刚刚选择的CategoryID
对于asp按钮点击事件,我是否在正确的轨道上?还是我应该做完全不同的事情?多亏了@StephenMuecke,我成功地解决了这个问题 以下是我所做的: 在我的创建页面上,我有一个类别ID的隐藏字段
@Html.HiddenFor(model => model.CategoryID, new { @class = "form-control", @id = "tbCategoryID" })
以及一个文本框,用于在选定类别后放置类别名称-这不是必需的,但有助于用户反馈他们实际选择了一个类别:
@Html.TextBox("CategoryName", null, new { @class = "form-control", @id = "tbCategoryName", @readonly = "readonly" })
我的treeview/nested
的每个节点都有一个
,带有classcategory
和数据id和数据categoryname属性,以存储这些详细信息供以后使用
<span class="leaf closemodal category" data-id="@item.CategoryID" data-categoryname="@item.CategoryName"> @item.CategoryName</span>
添加此单击功能意味着当用户单击其中一个
时,它将从span的数据XXX
属性中获取id和名称。然后,该函数将ID和名称添加到相应的字段中—HiddenField和textBox
表单提交后,类别ID将被发回控制器。您的操作链接仅向方法传递一个参数
ID
,因此它应该是public ActionResult SelectCategory(int ID)
如果我理解正确,您希望创建具有指定类别的新产品,在这种情况下,您的链接应该指向ProductController
上的方法(例如)public ActionResult Create(int id)
,在该方法中初始化新的产品
,根据id
参数设置类别,然后返回用于创建新产品的视图,所以链接应该是@Html.ActionLink(@item.CategoryID.ToString(),“Create”,“Product”,new{id=@item.CategoryID},null)
谢谢。好的,让我试试。此时我已经在“创建产品”页面上了-这难道不会“放弃”该产品和我输入的任何其他数据(例如标题)并打开一个新页面吗?如果是这样,为什么还要调用控制器方法?如果您在产品创建页面上,那么您需要做的就是将所选类别分配给表单中的控件。您需要将categoriesid
值存储到关联的元素-data id=“@item.CategoryID”
,然后处理元素。单击()
事件,检索值-var id=$(this.data('id')
并将其分配给与类别属性关联的任何控件。您尚未显示您的模型或视图,因此不能更具体。不管你对什么感兴趣
<span class="leaf closemodal category" data-id="@item.CategoryID" data-categoryname="@item.CategoryName"> @item.CategoryName</span>
$('span.category').click(function () {
var id = $(this).data('id');
var name = $(this).data('categoryname');
$('#tbCategoryID').val(id);
$('#tbCategoryName').val(name);
});