我有一个文本文件,当用户上传文件时,控制器操作方法使用状态机解析该文件,并使用通用列表存储一些值。我以隐藏字段的形式将其传回页面。然后,用户可以单击调用JS模式拨号框的链接,他们可以看到列表并为列表中的每个项添加注释。当他们点击链接时,我试图发布一个动作方法,该方法将采用该隐藏字段并对其执行某些操作并渲染局部视图。问题是,当我发布到此操作方法时,此字段将作为null传递。
这是我的代码
@Html.HiddenFor(model => model.ExceptionString)
if (Model.ExceptionString != null)
{
if (Model.ExceptionString.Count > 0)
{
<div class="bodyContent">
<span class="leftContent">
@Html.Label("Test Exceptions")
</span><span class="rightContent"><span id="TestExceptionChildDialogLink" class="treeViewLink">Click
here to View Test Exceptions</span>
<br />
<span id="TestExceptionDisplay"></span>
@Html.HiddenFor(model => model.ExceptionString)
<input id="ExceptionString" type="hidden" value="@Model.ExceptionString" />
</span>
</div>
}
}
<div id="testExceptiontreeview" title="Dialog Title" style="font-size: 10px; font-weight: normal;
overflow: scroll; width: 800px; height: 450px;">
<div id="testExceptions">
</div>
<div id="inputTestExceptions" style="display: none;">
</div>
</div>
var runlogTestExceptionUrl = '@Url.Action("ListTestExceptions", "RunLogEntry")';
JS FILE
$("#inputTestExceptions").load(runlogTestExceptionUrl, { ExceptionStrings: $("#ExceptionString").val() });
控制器操作
[HttpPost]
public ViewResult ListTestExceptions(List<string> ExceptionStrings)
{
关于为什么异常字符串列表在被JS传递给abive action方法时为null的任何想法?
答案 0 :(得分:1)
$("#ExceptionString").val()
将返回一个字符串。这意味着您对.load
的调用只是将一个名称/值对发布到您的MVC应用程序。
您需要发布一组名称/值对。名称将相同:带索引器的集合的名称。该值将是异常字符串。这将需要一些重大的重构。
这是基本的方法:
查看代码:
<form action="@Url.Action("ListTestExceptions", "RunLogEntry")" TYPE="POST">
@{ int counter = 0;}
@foreach(var exception in Model.ExceptionString)
{
<input id='@("ExceptionString["+counter+"]")' type="hidden" value='@exception' />
@{ counter =counter + 1; }
}
</form>
JS代码:
$.ajax({
url: runlogTestExceptionUrl,
data: $(this).serialize(),
success: function(data) {
$('#inputTestExceptions').html(data);
}
});
控制器动作不变:
[HttpPost]
public ViewResult ListTestExceptions(List<string> ExceptionStrings)
{
显然,这不会立即与您的代码集成。但这将是在MVC中将数据从表单发布到单个集合变量的方法。
注意:我对剃刀语法有点生疏,所以可能会有一些语法问题。当我找到它们时,我会解决它们。