【问题标题】:choosing between 2 actions in one controller with single view by checkbox通过复选框在一个具有单个视图的控制器中选择 2 个操作
【发布时间】:2014-07-21 12:25:47
【问题描述】:

我的控制器中有 2 个动作,我想通过剃刀视图中的复选框选择要执行的动作。

这是我的控制器:

public ActionResult Person(string searchString)
    {
                                   
        var person = from p in db.Persons
            select p;
        if (!String.IsNullOrEmpty(searchString))
        {
            person = person.Where(oo => oo.Name.ToUpper() == searchString);
        }
        
            return View(person);           
    }

    public ActionResult Job(string jobString)
    {
        var jobs = from j in db.Jobs
            select j;
        if (!String.IsNullOrEmpty(jobString))
        {
            jobs = jobs.Where(oo => oo.Name.ToUpper() == jobString);
        }
        return View(jobs);
    }

当我检查一个案例时,我想针对这个特定案例执行查询搜索

这是我的看法:

<div>
<form method="POST">
    <div>
        <input type="checkbox" name="Person" value="Person" style="margin-left: 54px"/>Person
    </div>
    <div class="Job">
        <input type="checkbox" name="Job" value="Job" />Job
    </div>
    @using (Html.BeginForm())
    {
        <p>
            <input type="text" name="SearchString" style="margin-left: 90px;" />
            <input type="submit" value="Search" />
        </p>
    }

</form>

【问题讨论】:

  • 你为什么要添加两个表格? html.beginform 执行时会在内部创建表单标签
  • 你使用嵌套表单是错误的。

标签: asp.net-mvc-4 razor


【解决方案1】:

发布到单个操作方法,然后根据复选框的值调用现有方法之一。

public ActionResult Search(bool isJobSearch, string searchString)
{
    if (isJobSearch)
    {
        return Job(searchString);
    }
    else
    {
        return Person(searchString);
    }

}

private ActionResult Person(string searchString)
{
    // As your example
}

private ActionResult Job(string jobString)
{
    // As your example
}

【讨论】:

  • 实际上他正在创建两种形式..他的html是否正确?你能检查一下吗
【解决方案2】:

我只是在纠正你的 html

您的 html 包含两个表单标签。我不确定表单与表单标签的用法。 html.beginform 将在执行时在内部创建另一个表单标签。所以更好的一个表单标签将包含发布帖子的所有元素。

 @using (Html.BeginForm("Search","Home"))
        {
    <div>
    <input type="checkbox" name="Person" value="Person" style="margin-left: 54px"/>Person
    </div>
    <div class="Job">
            <input type="checkbox" name="Job" value="Job" />Job
        </div>

            <p>
                <input type="text" name="SearchString" style="margin-left: 90px;" />
                <input type="submit" value="Search" />
            </p>
        }

    }

在控制器中

public ActionResult Search(FormCollection form)
{
//do some condition based on your needs
 if(form["SearchString"]=="Job")
   return RedirectToAction("Job");
else
return RedirectToAction("Person");
}

public ActionResult Person()
{

}

public ActionResult Job()
{

}

【讨论】:

  • 而不是在搜索栏中输入 Job 以将我重定向到操作,我想使用复选框执行此操作,当我选择 Job 时,它会将我重定向到操作 Job。所以我可以从搜索栏中搜索数据库 JOB 和 Person
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多