参数没有被正确地传递到从视图
问题描述:
控制器操作对于应用我的工作,我已经得到了一个查看下面的剃刀代码我的工作:参数没有被正确地传递到从视图
@Html.InputFor(m => m.Property1); // A date
@Html.InputFor(m => m.Property2); // Some other date
@Html.InputFor(m => m.SomeOtherProperty); // Something else.
<a href='#' id='some-button'>Button Text Here</a>
<!-- SNIP: Extra code that dosen't matter -->
<script>
var $someButton = $('#some-button');
$(document).ready(function() {
$someButton.click(function (e) {
e.preventDefault();
window.open('@Url.Action("Foo", "Home", new {p1 = Model.Property1, p2 = Model.Property2, pX = Model.SomeOtherProperty})', '_blank');
});
});
</script>
...在评论,我检查了呈现的HTML。该值来与价值观,符合市场预期...
<input name="Property1" data-val="true" data-val-required="(Required)" type="text" value="1/1/2013">
<input name="Property2" data-val="true" data-val-required="(Required)" type="text" value="4/11/2013">
<input name="SomeOtherProperty" data-val="true" data-val-required="(Required)" type="text" value="42">
<a href='#' id='some-button'>Button Text Here</a>
<script>
var $someButton = $('#some-button');
$(document).ready(function() {
$someButton.click(function (e) {
e.preventDefault();
window.open('http://localhost:xxxx/Home/Foo?p1=1%2F1%2F2013&p2=4%2F11%2F2013&pX=42', '_blank');
});
});
</script>
...并在服务器端...
public ActionResult Foo(string p1, string p2, string pX)
{
var workModel = new FooWorkModel
{
Property1 = p1,
Property2 = p2,
SomeOtherProperty = pX
};
// Do something with this model, dosen't really matter from here, though.
return new FileContentResult(results, "application/some-mime-type");
}
我注意到,只有第一个参数(p1
)越来越来自前端的价值;我的所有其他参数正在传递空值!
问题:为某些值分配给这些其他字段时,ActionResult为什么会传递空值?或者,一个免费的问题:为什么只有第一个参数成功通过它的值,而其他一切都失败了?
答
该问题是由Url.Action()
生成的转义URL引起的。 (来源:How do I pass correct Url.Action to a JQuery method without extra ampersand trouble?)
只需在Url.Action()
周围添加一个@Html.Raw()
调用,数据将按预期流动。
window.open('@Html.Raw(Url.Action("Foo", "Home", new {p1 = Model.Property1, p2 = Model.Property2, pX = Model.SomeOtherProperty}))', '_blank');
你呈现的HTML看起来像什么?当页面加载时,Property2和SomeOtherProperty是否设置为空值? – 2013-04-11 19:57:25
属性1,2和SomeOtherProperty全部填充。值得注意的是,我正在使用的过程要求输入信息,并点击搜索链接。这提交了一个模型的副本(填充信息),作为搜索的标准。该信息被填充到子模型列表中,并且具有> 0的计数的列表允许我编码的链接甚至被呈现。 – 2013-04-11 20:01:44
Andrew,window.open('@ Url.Action(“Foo”,“Home”,new {p1 = Model.Property1,p2 = Model.Property2,pX = Model.SomeOtherProperty})','_blank');这行代码在HTML中产生了什么?当js运行时,您粘贴的输入值不会被使用。 – 2013-04-11 20:23:23