You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Razor表单中添加参数,实现向控制器Action传参

没问题,我来帮你捋清楚怎么给Movies控制器的Search Action传递参数!其实ASP.NET Core的模型绑定已经帮我们做了大部分工作,只要表单元素的name和Action方法的参数对应上就行,我给你一步步拆解:

第一步:定义控制器的Search Action方法

首先你需要在MoviesController里写好接收参数的Action,有两种常用方式:

方式1:直接用单个参数(适合参数少的场景)

如果只有搜索关键词和分类两个参数,直接把它们作为Action的参数即可,参数名要和表单元素的name属性完全一致:

public IActionResult Search(string searchmovie, string option)
{
    // 这里写你的搜索逻辑,比如根据关键词和分类筛选电影
    // 举个简单示例:
    var filteredMovies = _dbContext.Movies
        .Where(m => m.Title.Contains(searchmovie) && m.Category == option)
        .ToList();
    return View(filteredMovies);
}

方式2:用ViewModel类(推荐参数多或后续要扩展的场景)

如果以后要加更多搜索条件(比如年份、评分),用ViewModel会更整洁。先创建一个ViewModel类:

public class MovieSearchViewModel
{
    public string SearchMovie { get; set; }
    public string SelectedCategory { get; set; }
}

然后Action改成接收这个ViewModel:

public IActionResult Search(MovieSearchViewModel searchModel)
{
    // 用searchModel的属性来处理逻辑
    var filteredMovies = _dbContext.Movies
        .Where(m => m.Title.Contains(searchModel.SearchMovie) && m.Category == searchModel.SelectedCategory)
        .ToList();
    return View(filteredMovies);
}

第二步:调整你的Razor表单

根据上面的Action写法,对应调整表单代码:

如果用单个参数的方式

你的现有表单已经接近正确了,只要去掉select标签里多余的form=""(因为select已经在form内部,不需要指定这个属性),再加上提交按钮就行:

<form class="full-search" asp-controller="Movies" asp-action="Search" method="get">
    <input type="search" name="searchmovie" placeholder="Search..." class="search-form">
    <select name="option">
        <option value="category1">category 1</option>
        <option value="category2">category 2</option>
        <!-- 其他分类选项 -->
    </select>
    <button type="submit" class="search-btn">搜索</button>
</form>

这里method="get"是搜索场景的常用写法,参数会显示在URL里,方便用户书签或分享链接;如果需要隐藏参数,改成method="post",记得给Action加上[HttpPost]特性。

如果用ViewModel的方式

推荐用asp-for标签助手,它会自动生成正确的name属性,还能帮你做验证提示,避免拼写错误:

@model MovieSearchViewModel

<form class="full-search" asp-controller="Movies" asp-action="Search" method="get">
    <input type="search" asp-for="SearchMovie" placeholder="Search..." class="search-form">
    <select asp-for="SelectedCategory">
        <option value="category1">category 1</option>
        <option value="category2">category 2</option>
        <!-- 其他分类选项 -->
    </select>
    <button type="submit" class="search-btn">搜索</button>
</form>

关键小提示

ASP.NET Core的模型绑定会自动把表单字段值,根据name属性匹配到Action的参数(或ViewModel的属性)上,只要名字一致就能自动传递,不用手动解析请求参数~另外如果参数可能为空(比如用户没输入关键词就提交),记得在Action里做null判断,避免空引用错误哦!

内容的提问来源于stack exchange,提问作者Pavel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:11:18