Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.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# 如何在MVC5中将选择选项值从视图传递给控制器_C#_Html_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 如何在MVC5中将选择选项值从视图传递给控制器

C# 如何在MVC5中将选择选项值从视图传递给控制器,c#,html,asp.net-mvc,asp.net-mvc-5,C#,Html,Asp.net Mvc,Asp.net Mvc 5,视图: 我无法在roleValue1中获取选择选项值 我想从roleValue1中获取值,并使用它触发视图中的另一个下拉列表 如果你看一下标签的语法,它是这样的 public class APIController : Controller { public ActionResult Index(FormCollection formCollection) { dynamic mymodel = new ExpandoObject(); Segme

视图:

我无法在roleValue1中获取选择选项值


我想从roleValue1中获取值,并使用它触发视图中的另一个下拉列表

如果你看一下标签的语法,它是这样的

public class APIController : Controller
{
    public ActionResult Index(FormCollection formCollection)
    {
        dynamic mymodel = new ExpandoObject();
        SegmentRepository segment = new SegmentRepository();
        mymodel.listofSegments = segment.GetSegmentation();
        String roleValue1 = formCollection["Segmentation"];
        return View(mymodel);
    }
}
<select>
  <option value="volvo">Volvo</option>
</select>
您必须设置每个选项的值,但在您的情况下,您只是提供文本而不是值。所以应该是这样

public class APIController : Controller
{
    public ActionResult Index(FormCollection formCollection)
    {
        dynamic mymodel = new ExpandoObject();
        SegmentRepository segment = new SegmentRepository();
        mymodel.listofSegments = segment.GetSegmentation();
        String roleValue1 = formCollection["Segmentation"];
        return View(mymodel);
    }
}
<select>
  <option value="volvo">Volvo</option>
</select>

您必须更改:

@using (Html.BeginForm("Index", "APIController",FormMethod.Post))
{
    <select id="Segmentation" name="Segmentation">
    @foreach (var item in Model.listofSegments)
    {
        <option value="@item">@item</option> //if the value is same as text
    }
    </select>
    <input type="submit" value="Send" />
}
致:


目前您在这里有两个问题:

1 select元素内的选项标记要求使用FormCollection实例发布value属性

2 BeginForm应使用适当的控制器名称,并在相应的控制器操作方法上标记HttpPost属性。默认情况下,控制器操作方法使用HttpGet

正确的用法如下:

看法

如果要将FraveCube传递到动态ExpEntoObjor,则有一个要考虑的帖子:.< 此外,如果要传递select option value以将选项值插入同一视图页上的其他select元素中,则需要在客户端使用传递的数据中使用jQuery AJAX回调$.AJAX,并在成功响应后使用append方法添加选项元素。

查看代码

控制器代码


您想使用层叠HTML选择吗?如果我的猜测是正确的,考虑使用客户端JS,它触发Ajax调用到控制器动作和返回响应数据,可能使用部分视图或Ajax成功,它可以附加第二个下拉选项元素。
@using (Html.BeginForm("Index", "APIController", FormMethod.Post))
@using (Html.BeginForm("Index", "API", FormMethod.Post))
@using (Html.BeginForm("Index", "API", FormMethod.Post))
{
    <select id="Segmentation" name="Segmentation">
    @foreach (var item in Model.listofSegments)
    {
        <option value="@item">@item</option>
    }
    </select>
    <input type="submit" value="Send" />
}
public class APIController : Controller
{
    [HttpPost]
    public ActionResult Index(FormCollection formCollection)
    {
        dynamic mymodel = new ExpandoObject();
        SegmentRepository segment = new SegmentRepository();
        mymodel.listofSegments = segment.GetSegmentation();
        String roleValue1 = formCollection["Segmentation"];

        return View(mymodel);
    }
}
@model dynamic
@{
    ViewBag.Title = "ddl";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>ddl</h2>

<div>
    @using (Html.BeginForm("ActionPostData", "Demo", FormMethod.Post))
{
    <select name="Segmentation">
        <option selected value="0">---Select---</option>
        @foreach (var item in Model)
        {
            <option value="@item.Value">@item.Text</option>
        }
    </select>
            <input type="submit" value="Send" />
}
</div>
public ActionResult Ddl()
{
    var segmentList = new List<listofSegments>();
    listofSegments segmentItem;
    var strArr = new string[] { "Jaipur", "Kota", "Bhilwara", "Udaipur", "Chitorgar", "Ajmer", "Jodhpur" };
    for (int index = 0; index < strArr.Length; index++)
    {
        segmentItem = new listofSegments();
        segmentItem.Text = strArr[index];
        segmentItem.Value = (index + 1).ToString();
        segmentList.Add(segmentItem);
    }
    return View(segmentList);
}

[HttpPost]
public ActionResult ActionPostData(string Segmentation)
{
    return RedirectToAction("Ddl");
}

public class listofSegments
{
    public string Text { get; set; }
    public string Value { get; set; }
}