Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# 在视图上选择选项时调用MVC控制器方法_C#_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 在视图上选择选项时调用MVC控制器方法

C# 在视图上选择选项时调用MVC控制器方法,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我有一个带有两个选项的select标记。当选择一个选项时,我想在我的控制器上调用一个方法 控制器中的方法包含一个开关,该开关将根据所选选项设置3个UINT。然后我想返回到最初的视图,该视图称为动作 我在一个问题上有点困惑,如何在视图中触发操作,以及在两个问题上如何重定向到调用视图 我的观点如下 @using <The controller name goes here> @{ ViewBag.Title = "Stuff"; Layout = "~/Views/Sh

我有一个带有两个选项的select标记。当选择一个选项时,我想在我的控制器上调用一个方法

控制器中的方法包含一个开关,该开关将根据所选选项设置3个UINT。然后我想返回到最初的视图,该视图称为动作

我在一个问题上有点困惑,如何在视图中触发操作,以及在两个问题上如何重定向到调用视图

我的观点如下

@using <The controller name goes here>

@{
    ViewBag.Title = "Stuff";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Stuff</h2>
<p>More Stuff</p>
<label>Select a Room: </label>
<!-- I need to add Code that will loop through the database and provide rooms. 
        I will need to provide a query that will be called on page load.-->

<select id="roomList">
    <option value="1B^1001^01">1B^1001^01</option>
    <option value="1B^1002^01">1B^1002^01</option>
</select><br /><br />

SELECT
元素本身无法提交表单。当
SELECT
更改时,您需要使用某种形式的JavaScript来提交表单

使用jQuery:

$("#roomList").on("change", function() {
    $(this).closest("form").submit();
});

然后控制器操作可以返回视图的名称或重定向到显示视图的操作。

您需要在JavaScript中为
的更改事件设置事件处理程序。在该处理程序中,您将有一个对控制器的AJAX调用

$("#roomList").on("change", function() {
        $.ajax({               {
              url: @Url.Action("getRoomNumber", "SomeController", new {roomNumber = $("#roomList :selected").text()}),
              context: document.body
        }).done(function() {
               // do whatever you need to do in your view here
               alert("Done!");
           });
});

我没有将这些引用变量传递给控制器,因此您需要这样做才能让控制器操作更改它们。

如果使用Jquery,有一种简单的方法:

$("#roomList").change(function() {
    $(this).parents("form").submit();
});
但您还需要更新html(在您的选择周围添加一个表单):


好的,所以我必须使用表单提交。我知道我已经使用on更改在客户端触发JQuery。但我读到的是,因为这是调用一个控制器方法,所以它必须使用表单。让我看看我能不能让它工作。谢谢。是的,所有表单元素都需要一个表单。在MVC Razor视图中,您可以使用
@using(Html.BeginForm()){…code…}
我假设控制器/动作和动作是值的占位符?是否尝试将
ref
值返回视图?您可能想观看为mvc4制作的视频pluralsight,我实际上是在将它们传回控制器,以便与其他方法一起使用。他们永远不会到达风景区。
$("#roomList").change(function() {
    $(this).parents("form").submit();
});
<form action="controller/action">
  <select id="roomList">
    <option value="1B^1001^01">1B^1001^01</option>
    <option value="1B^1002^01">1B^1002^01</option>
  </select><br /><br />
</form>
return RedirectToAction("action");
return View("viewName"); //Not quite sure about the parameters here, but you can read the doc ;-)