这是我尝试过的:
在控制器中:
public ActionResult Detail()
{
List<string> list = new List<String>();
return View(list);
}
从细节来看:
@model dynamic
<!-- some HTML -->
<script>
@Model.add(document.getElementById("input_box").value);
</script>
问题是,智能不检测传入的对象是否为List,因此@ Model.add不起作用。
我的目标是将一个列表传递到视图中,这样我就可以从用户输入中收集数据,然后在我的控制器中使用该数据列表。有什么想法吗?
答案 0 :(得分:3)
使用静态类型模型可以解决当前问题:
@model List<string>
<!-- some HTML -->
<script>
@Model.Add(document.getElementById("input_box").value);
</script>
然而,当编译器抱怨它不知道document
是什么时,你会很快碰到另一堵墙。这是因为Razor视图在服务器端呈现,但document
是客户端浏览器提供的对象。您无法从客户端向此服务器端列表动态添加元素。您需要以某种方式对列表进行编码,以便客户端能够读取,例如在JavaScript数组中。然后使用JavaScript .push
方法动态修改客户端列表。然后以单独的操作将其发送回控制器。
答案 1 :(得分:2)
这不会那么简单。
首先,您使用的Razor声明
@Model.add(document.getElementById("input_box").value);
不是有效的C#语句。当您尝试打开页面时会导致异常,因为您正在使用的模型类型(List<T>
)没有名为add
的方法(尽管它有Add
),而且因为javascript是无效的Razor代码:)
其次,您似乎对服务器 - 客户端交互的工作方式感到困惑。 您需要仔细考虑如何实现您想要做的事情 -
为了能够从客户端(用户的浏览器)获取信息,首先需要渲染页面,将其发送到客户端,让用户(或其他)输入信息,然后将其转到将其发送回Controller操作。目前您的网页甚至没有渲染,因此您无法希望从任何人那里获取数据。
这仍然可以通过多种方式解决,其中一种方法是使用Html.BeginForm(...)
创建一个简单的表单,并在其中的某处有一个输入元素和一个提交按钮。
如果您可以让用户将数据提交给您,则可以使用前面提到的Controller操作中的数据执行任何操作。
答案 2 :(得分:0)
好的,通过在View的JavaScript中创建一个全局数组,然后将它作为Ajax参数传递给Controller函数来解决它。