我正在尝试将一个JSON对象(一个JSON-ified淘汰模型,如果有任何相关性)发布到我的MVC控制器,并让控制器返回一个新视图.为此,我将使用表单发送数据.问题是我希望在控制器收到JSON时自动将JSON转换为模型.
如果我要使用AJAX调用,
var actionModel = new Object();
actionModel.Controls = ko.toJS(self.controls());
var json = JSON.stringify(actionModel);
$.ajax({
url: "MyController/Preview",
type: "POST",
contentType: 'application/json; charset=utf-8',
cache: false,
data: json,
success: function (data) {
}
});
Run Code Online (Sandbox Code Playgroud)
... JSON对象已成功反序列化并转换为我的模型类的实例.
public ActionResult Preview(ActionModel actionModel) { ... }
public class ActionModel
{
public List<ControlModel> Controls { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我想用表单执行此操作,我理解我需要将JSON插入到隐藏的输入字段中,但是在执行此操作时我能够管理的最佳方法是将数据作为序列化字符串接收:
@using (Html.BeginForm("Preview", "MyController", FormMethod.Post, new { id = "previewForm" }))
{
<input type="hidden" id="hiddenFieldName" />
}
public ActionResult Preview(string hiddenFieldName) { ... }
Run Code Online (Sandbox Code Playgroud)
我之后可以反序列化它,但我真的更喜欢它,如果MVC可以为我转换它,就像使用AJAX调用一样.这可能吗?
谢谢.
我遇到的问题是,当我将模型的属性发送到我的控制器以获取来自Kendo Grid的更新或创建调用时,其属性未正确更新.该模型如下所示:
public class ReleaseNotesModel
{
public int NoteID { get; set; }
public int ReleaseID { get; set; }
public List<TranslationModel> ReleaseNoteTranslations { get; set; }
public ReleaseNoteType ItemType { get; set; }
}
public class TranslationModel
{
public int TranslationID { get; set; }
public string Translation { get; set; }
public int LanguageID { get; set; }
public int ItemID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我视图中的网格:
@(Html.Kendo().Grid<ReleaseNotesModel>()
.Name("Grid")
.Columns(columns =>
{
columns.Bound(m => m.ItemType).Width(140);
columns.Bound(m => m.Description); …Run Code Online (Sandbox Code Playgroud) 我遇到了一个简单的html登录页面的问题,当我提交带有无效凭据的登录表单时,表单仍然提交,即使我的验证方法正在执行"return false"命令.我知道这个问题在这里被多次提出过,但这些问题的答案都没有帮助我.
我的html表格如下:
<form onSubmit="return validateForm();" method="get" action="TestPage.html">
<div id="centralPoint" class="frame">
<select id="centralPointSelect" data-inline="true" data-mini="true" data-native-menu="false" name="centralPoint"></select>
</div>
<div id="credentialsFrame" class="frame">
<input id="userField" type="text" name="Username" />
<input id="passField" type="password" name="Password" />
</div>
<div id="errorMsg"></div>
<input id="loginBtn" type="submit" value="Login" />
<div id="rememberMe" class="frame">
<input type="checkbox" id="checkbox-1" class="custom" data-mini="true" name="rememberMe" />
<label for="checkbox-1">Keep me signed in</label>
</div>
<div id="forgotPassFrame">
<input id="forgotPass" type="button" data-mini="true" value="Forgot password?" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的javascript方法.请注意,即使这里唯一的代码行是"return false;" 表格仍然提交.我还检查了firebug,以确保该方法实际上被调用,并且它确实返回false,并且全部检出.
function validateForm()
{
var usernameTxt = $("#userField").attr("value");
var passwordTxt = $("#passField").attr("value"); …Run Code Online (Sandbox Code Playgroud) 我试图在我的代码中克隆一个 List,因为我需要将该 List 输出到其他一些代码,但原始引用稍后将被清除。所以我有了使用Select扩展方法来创建IEnumerable对相同元素的新引用的想法,例如:
List<int> ogList = new List<int> {1, 2, 3};
IEnumerable<int> enumerable = ogList.Select(s => s);
Run Code Online (Sandbox Code Playgroud)
现在做完之后ogList.Clear(),我惊讶地发现我的新枚举也是空的。
所以我开始在 LINQPad 中摆弄,发现即使我Select完全返回不同的对象,行为也是一样的。
List<int> ogList = new List<int> {1, 2, 3};
IEnumerable<int> enumerable = ogList.Select(s => 5); // Doesn't return the original int
enumerable.Count().Dump(); // Count is 3
ogList.Clear();
enumerable.Count().Dump(); // Count is 0!
Run Code Online (Sandbox Code Playgroud)
请注意,在 LINQPad 中,Dump()s 等效于Console.WriteLine().
现在可能我首先需要克隆列表是由于糟糕的设计,即使我不想重新考虑设计,我也可以轻松地正确克隆它。但这让我开始思考Select扩展方法实际上做了什么。
根据该文件为Select:
该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 …
asp.net-mvc ×2
.net ×1
c# ×1
html ×1
html5 ×1
javascript ×1
json ×1
kendo-grid ×1
kendo-ui ×1
knockout.js ×1
linq ×1