【问题标题】:Retrieve text (not value) from select option tag从选择选项标签中检索文本(不是值)
【发布时间】:2016-03-14 17:08:57
【问题描述】:

我正在使用 asp.net c# mvc4

我目前可以从视图中检索控制器中选定选项的值,但我还需要检索文本。我的视图和控制器如下所示:

查看:

<form method="post" action="myAction">
     <select name="sel">
          <option value="1" text="One">One</option>
          <option value="2" text="Two">Two</option>
     </select>
</form>

控制器:

public ActionResult myAction(int sel) 
{
     int selValue = sel;
}

这段代码非常适合我。但是,在我的控制器中,我想添加 string selText=something 以便我也有文本,代码如下所示:

public ActionResult myAction(int sel, string something) 
{
     int selValue = sel;
     string selText = something
}

谁能帮我解决这个问题?

【问题讨论】:

  • 你有什么问题?
  • 我不确定something 部分应该是什么。 int sel 部分选择对我来说很好的选定选项的值。如何从所选选项中选择文本而不是值?
  • 所以你想获得选项的内部文本,如果不引入一些javascript(或浏览器中的一些其他组件),你将无法做到这一点。 HTML 表单提交包含input 控件的值。
  • 您可以尝试使用分隔符将值和文本都放入值属性中。像这样:value="1|One" 并在控制器中再次分离。
  • @JennyO'Reilly 有一个很好的建议,但您的方法仍然只需要一个 string 参数,并且 OP 必须将该参数拆分为适当的值。这将比尝试编写大量 javascript简单得多

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

通常您无法获取文本,因为表单仅发布选择的值。但是您可以从服务器(在模型或 ViewBag 中)动态填充选择列表,并且当您收到带有该值的帖子时 - 获取与该值对应的文本。

这是一种非常常见的模式,不需要任何解释。你永远不会发回文本,因为你不需要它。

这里是代码:

public ActionResult myAction(int sel) 
{ 
   int selValue = sel; 
   string text= yourRepository.GetById(sel)?.YourText; 
 }

【讨论】:

  • 我已经从上面的 cmets 中得到了答案,但你的建议听起来也很有趣。事实上,我正在从服务器(在模型中)动态生成我的列表。上面的代码只是一个示例。您能否详细说明如何使用此方法获取与值对应的文本?
  • public ActionResult myAction(int sel) { int selValue = sel; string text= yourRepository.GetById(sel)?.YourText; } 你有另一个对 DB 的调用,但你不会根据容易出错的分隔符拆分值。
  • 是的,这是一个不错的解决方案。在控制器中使用Dictionary&lt;int, string&gt; 之类的东西并将其传递给视图以动态构建您的选择列表。这样,您可以通过调用myDictionary[sel](在这种情况下,sel 是一个 int)在 View 和 Controller 的 Action 方法中使用它。
【解决方案2】:

您可以使用分隔符将两者(值和文本)放入 value 属性中。

<form method="post" action="myAction">
      <select name="sel">
          <option value="1|One">One</option>
          <option value="2|Two">Two</option>
     </select>
</form>

并在控制器中再次分离。

public ActionResult myAction(string sel) 
{
    string[] selSplit = sel.Split('|');
    int selValue = int.Parse(selSplit[0]);
    string selText = selSplit[1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2017-04-19
    • 2019-09-23
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多