我在尝试将复杂的JSON对象传递给MVC 4控制器操作时遇到了麻烦.由于JSON内容是可变的,我不希望MVC将JSON的各个属性/元素映射到action方法的参数列表中的参数.我只想在控制器操作中将数据作为单个JSON字符串参数获取.
这是我的动作方法的签名:
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(string jsonOfLog)
Run Code Online (Sandbox Code Playgroud)
这是我尝试从我的浏览器发布一些JSON数据:
data = {prop: 1, myArray: [1, "two", 3]};
//'data' is much more complicated in my real application
json = {jsonOfLog: data};
$.ajax({
type: 'POST',
url: "Home/ConvertLogInfoToXml",
data: JSON.stringify(json),
success: function (returnPayload) {
console && console.log ("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log ("request failed");
},
dataType: "xml",
contentType: "application/json",
processData: false,
async: false
});
Run Code Online (Sandbox Code Playgroud)
当我在ConvertLogInfoToXML方法的开头点击断点时,jsonOfLog为空.
如果我更改了JavaScript中设置的'json'变量,以使jsonOfLog属性成为一个简单的字符串,例如:
json = { jsonOfLog: "simple string" };
Run Code Online (Sandbox Code Playgroud)
然后当我在ConvertLogInfoToXML方法开头的断点被命中时,jsonOfLog是字符串的值(例如"简单字符串").
我尝试将action方法中的jsonOfLog参数的类型更改为object类型: …
好吧,是的,现在是 2020 年了,但别笑。我正在尝试更新一些 ASP.NET Web 表单。我的目标是锁定它们,通过应用更严格的内容安全策略 (CSP) 使它们更加安全。为此,我使用随机数,而不是允许unsafe-inline编写脚本。
对于“简单”的网络表单,它工作得很好。然而,只要有 ASP 控件导致回发,我就会遇到问题。当我查看页面源代码时,我看到如下内容:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
Run Code Online (Sandbox Code Playgroud)
和
<script type="text/javascript">
function previewFile() {
var preview = document.querySelector('#Body_Main_LogoImage');
var file = document.querySelector('#Body_Main_logoUpload').files[0];
var reader = new FileReader();
reader.onloadend = function () {
preview.src = reader.result;
}
if (file) {
reader.readAsDataURL(file);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试为基于 webpack 的应用程序中的测试代码添加 Jest 支持。我想我有基本的配置权利,因为一个非基于组件的测试(比如下面的“添加数字”)通过了。但是,当我尝试与 DOM 交互时,会出现错误。我正在尝试create-react-apps docs docs(测试组件部分)中描述的吸烟测试场景的变体。我的测试文件如下所示:
import React from 'react';
import ReactDOM from 'react-dom';
it('adds number', () => {
expect(2 + 2).toBe(4);
});
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<div/>, div);
});
Run Code Online (Sandbox Code Playgroud)
输出是:
v 加号(10ms)
× 渲染而不会崩溃(3 毫秒)
渲染而不会崩溃
类型错误:无法读取未定义的属性“渲染”
Run Code Online (Sandbox Code Playgroud)44 | it('renders without crashing', () => { 45 | const div = document.createElement('div'); 46 | ReactDOM.render(<div/>, div); | ^ 47 | });
at Object.<anonymous> (/pathto/TestFile.test.tsx:46:12)
Run Code Online (Sandbox Code Playgroud)
我的应用程序不是用 create-react-app 构建的。相反,我尝试按照Jest webpack 文档中 …
我有一个查看提供的子代的函数,如果找到了特定的元素类型,它将自动为其添加一些属性。
该函数的调用方式如下:
render () {
const { children, name, className } = this.props;
return (
<div className={className}>
{this.enrichRadioElements(children, name)}
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
它是这样实现的:
enrichRadioElements = (children: Array<any>, name: string) => (
React.Children.map(children, child => {
if (!React.isValidElement(child)) {
return child;
}
//@ts-ignore
if (child.props.children) {
child = React.cloneElement(child, {
//@ts-ignore
children: this.enrichRadioElements(child.props.children, name)
});
}
if (child.type === Radio) {
return React.cloneElement(child, {
onChange: this.handleFieldChange,
selectedValue: this.state.selectedValue,
name: name
})
}
else {
return child;
}
})
)
Run Code Online (Sandbox Code Playgroud)
//@ts-ignore我想通过编写满足打字稿要求的代码来摆脱这两个注释。如果删除第一个,则显示的错误消息是: …