Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 按钮点击事件的MVC等价物_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 按钮点击事件的MVC等价物

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.但我在每个树节点上都有一个按钮,

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
  • 的每个节点都有一个
    ,带有class
    category
    和数据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)
    谢谢。好的,让我试试。此时我已经在“创建产品”页面上了-这难道不会“放弃”该产品和我输入的任何其他数据(例如标题)并打开一个新页面吗?如果是这样,为什么还要调用控制器方法?如果您在产品创建页面上,那么您需要做的就是将所选类别分配给表单中的控件。您需要将categories
    id
    值存储到关联的元素-
    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);
                });