Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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
C# 解析路由参数_C#_Asp.net Core - Fatal编程技术网

C# 解析路由参数

C# 解析路由参数,c#,asp.net-core,C#,Asp.net Core,你好,我正在尝试在我的网站上为一些物理文章建立一个评论区,现在我希望当我点击 <a asp-route-articleid="smth" asp-action="Create">Create New</a> 将返回包含“articleid=smth”值的完整url字符串 如果我理解我的问题,那么你有以下问题 您在一个页面上有“创建”按钮,可以生成您描述的链接 现在,当您单击该链接时,您的create方法将被调用,它将返回您指定的视图。(此时,如果在方法中查找articl

你好,我正在尝试在我的网站上为一些物理文章建立一个评论区,现在我希望当我点击

<a asp-route-articleid="smth" asp-action="Create">Create New</a>

将返回包含“articleid=smth”值的完整url字符串

如果我理解我的问题,那么你有以下问题

  • 您在一个页面上有“创建”按钮,可以生成您描述的链接

  • 现在,当您单击该链接时,您的create方法将被调用,它将返回您指定的视图。(此时,如果在方法中查找articleId,则它将具有该值)

  • 现在,在您在评论中添加值并提交表单之后。届时您将无法找到articleId。这是因为articleId不在任何地方保存

  • 如果以上是您的问题,那么下面将解决您的问题

    解决方案。

    在控制器中创建两个方法

    获取单击“新建”时将调用的方法。提交表单时会调用另一个

  • 控制器

    [HttpGet]
    public async Task<IActionResult> Create(string articleId)
    {
        Physics t = new Physics();
        if(!string.IsNullOrEmpty(articleId))
        {
            t.ArticleID = articleId;
        }
        return View(t);
    }
    
    [HttpPost]
    public async Task<IActionResult> Create([Bind("ID,CommentContext,UserName,ArticleID")]Physics physics)
    {
        if (ModelState.IsValid)
        {
            physics.UserName = HttpContext.User.Identity.Name;               
    
            //_context.Add(physics);
            //await _context.SaveChangesAsync();
            return RedirectToAction("Index");
        }
        return View(physics);
    }
    
    [HttpGet]
    公共异步任务创建(字符串articleId)
    {
    物理学t=新物理学();
    如果(!string.IsNullOrEmpty(articleId))
    {
    t、 ArticleID=ArticleID;
    }
    返回视图(t);
    }
    [HttpPost]
    公共异步任务创建([Bind(“ID,CommentContext,UserName,ArticleID”)]物理)
    {
    if(ModelState.IsValid)
    {
    physics.UserName=HttpContext.User.Identity.Name;
    //_增加(物理学);
    //wait_context.SaveChangesAsync();
    返回操作(“索引”);
    }
    返回视图(物理);
    }
    
  • 在你看来,我做了一些小改动,所以articleId将保留。(请参见我已为articleId创建了隐藏字段)

  • 创建
    物理
    

    我希望这个解决方案能对您有所帮助。

    如果我理解我的问题,那么您有以下问题

  • 您在一个页面上有“创建”按钮,可以生成您描述的链接

  • 现在,当您单击该链接时,您的create方法将被调用,它将返回您指定的视图。(此时,如果在方法中查找articleId,则它将具有该值)

  • 现在,在您在评论中添加值并提交表单之后。届时您将无法找到articleId。这是因为articleId不在任何地方保存

  • 如果以上是您的问题,那么下面将解决您的问题

    解决方案。

    在控制器中创建两个方法

    获取单击“新建”时将调用的方法。提交表单时会调用另一个

  • 控制器

    [HttpGet]
    public async Task<IActionResult> Create(string articleId)
    {
        Physics t = new Physics();
        if(!string.IsNullOrEmpty(articleId))
        {
            t.ArticleID = articleId;
        }
        return View(t);
    }
    
    [HttpPost]
    public async Task<IActionResult> Create([Bind("ID,CommentContext,UserName,ArticleID")]Physics physics)
    {
        if (ModelState.IsValid)
        {
            physics.UserName = HttpContext.User.Identity.Name;               
    
            //_context.Add(physics);
            //await _context.SaveChangesAsync();
            return RedirectToAction("Index");
        }
        return View(physics);
    }
    
    [HttpGet]
    公共异步任务创建(字符串articleId)
    {
    物理学t=新物理学();
    如果(!string.IsNullOrEmpty(articleId))
    {
    t、 ArticleID=ArticleID;
    }
    返回视图(t);
    }
    [HttpPost]
    公共异步任务创建([Bind(“ID,CommentContext,UserName,ArticleID”)]物理)
    {
    if(ModelState.IsValid)
    {
    physics.UserName=HttpContext.User.Identity.Name;
    //_增加(物理学);
    //wait_context.SaveChangesAsync();
    返回操作(“索引”);
    }
    返回视图(物理);
    }
    
  • 在你看来,我做了一些小改动,所以articleId将保留。(请参见我已为articleId创建了隐藏字段)

  • 创建
    物理
    

    我希望此解决方案能对您有所帮助。

    您确定没有其他问题吗?另外,您是否确保当您单击CreateNew时,它将调用您在上面指定的Create方法。是的,我提供的解决方案似乎一切正常,老实说,可能会有更好的解决方案我远没有经验的程序员,但这个解决方案现在起到了作用,所以我不会抱怨你确定你没有任何其他问题?另外,您是否确保当您单击CreateNew时,它将调用您在上面指定的Create方法。是的,我提供的解决方案似乎一切正常,老实说,可能会有更好的解决方案,我远没有经验的程序员,但这个解决方案现在起作用了,所以我不抱怨汉克,这似乎是比我提供的更好的解决方案。但据我所知,这只是创建该特性的第一步,所以可以将注释添加到我所写的物理文章中。最后,我将提交表单移到了文章中,并使用方法名称作为articleId。谢谢,这似乎是比我提供的更好的解决方案。但据我所知,这只是创建该特性的第一步,所以可以将注释添加到我所写的物理文章中。最后,我将提交表单移动到文章中,并使用方法名称作为articleId。
    Request.Headers["Referer"].ToString();
    
    [HttpGet]
    public async Task<IActionResult> Create(string articleId)
    {
        Physics t = new Physics();
        if(!string.IsNullOrEmpty(articleId))
        {
            t.ArticleID = articleId;
        }
        return View(t);
    }
    
    [HttpPost]
    public async Task<IActionResult> Create([Bind("ID,CommentContext,UserName,ArticleID")]Physics physics)
    {
        if (ModelState.IsValid)
        {
            physics.UserName = HttpContext.User.Identity.Name;               
    
            //_context.Add(physics);
            //await _context.SaveChangesAsync();
            return RedirectToAction("Index");
        }
        return View(physics);
    }
    
    <h2>Create</h2>
    <form asp-action="Create">
        <div class="form-horizontal">
            <input asp-for="ArticleID" type="hidden" />
            <h4>Physics</h4>
            <hr />
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="CommentContext" class="col-md-2 control-label"></label>
                <div class="col-md-10">
                    <input asp-for="CommentContext" class="form-control" />
                    <span asp-validation-for="CommentContext" class="text-danger" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    </form>