相关页面是我软件的设置页面。我希望用户将许可证密钥粘贴到textarea中。然后他们可以选择验证它(在控制器上完成验证)并且可以“应用”它(保存在服务器上的reg键中)
但是我似乎达到了可以发送到控制器的最大长度。密钥以字符串形式传递,但失败并出现错误,其长度超过2142个字符。 (我的钥匙大概是2500 ish)
所以我认为我会聪明并使用切片将很长的许可证密钥分成2或3个部分,但后来我似乎达到了一个略短的“整体”长度限制。
所以这里的代码分为2个字符串,如果我将总长度保持在1800,它就可以正常工作 但是,如果我尝试添加第3个或将总长度增加到超过2000(大致),我会得到一个错误,并且永远不会达到控制器的断点。
控制器
Function UpdateLicense(Params As ConfigParams, NewLicenseKeyA As String, NewLicenseKeyB As
String) As EmptyResult
Dim LicKey As String = NewLicenseKeyA + NewLicenseKeyB
'just testing
Return Nothing
End Function
这是视图
$(document).ready(function () {
$("#CheckLicense").bind("click", function () {
$.ajax({
url: '@Url.Action("UpdateLicense", "Home")',
data: { NewLicenseKeyA: ($("#NewLicKey").val()).slice(0, 900), NewLicenseKeyB: $("#NewLicKey").val()).slice(900, 1800) },
success: function (data) {
alert("Success!");
},
error: function (xhr, ajaxOptions, thrownError) {
//some errror, some show err msg to user and log the error
alert(xhr.responseText);
}
});
我猜这个URL的总长度最终会阻止我,并且通过拆分字符串我会向URL添加更多内容,从而缩短了我发送许可证代码所需的空间。
任何想法..记得我是MVC和Web的新手。如果我的假设是正确的,那么我想也许我可以多次调用控制器,每个调用1000个字符,然后调用最后一个将它们连接在一起的调用。这有可能吗?
确定更新:我现在有一个解决方法。 这是更新的控制器
Function UpdateLicense(Params As ConfigParams, NewLicenseKeyPart As String, KeyName As String) As EmptyResult
Dim NewLicenseKey As String
Select Case KeyName
Case "A"
RegistryHelpers.SetRegistryValue("Software\FormeWare\SCAR\", "LicKeyA", NewLicenseKeyPart)
Return Nothing
Case "B"
Dim LicKeyPartA = RegistryHelpers.GetRegistryValue("Software\FormeWare\SCAR\", "LicKeyA", False)
NewLicenseKey = LicKeyPartA + NewLicenseKeyPart
'Proceed to Process
Case Else
'hmmmmm
End Select
Return Nothing
End Function
所以这很有效,但似乎是实现我想要的一种非常粗鲁的方式.. 这样做的“正确”方法是什么?
答案 0 :(得分:0)
这是我的模特:
namespace MvcApplication3.Models
{
public class LicenseModel
{
public LicenseModel()
{
ID = 1;
LicenseKey = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." +
"In auctor nisi sed ultricies consectetur. Suspendisse euismod " +
"sollicitudin tortor, nec accumsan eros facilisis sit amet. Integer" +
"non felis vel risus fermentum accumsan. Vivamus gravida orci in libero" +
"semper, nec ultrices turpis sodales. Quisque sit amet cursus dui, ac " +
"pharetra eros. Morbi ultricies risus ut turpis molestie imperdiet. ";
}
public bool Save()
{
//do whatever to do to save
return true;
}
public int ID { get; set; }
public string LicenseKey { get; set; }
}
}
我的控制器:
namespace MvcApplication3.Controllers
{
public class LicenseController : Controller
{
//
// View License/
public ActionResult ViewLicense()
{
LicenseModel model = new LicenseModel();
return View(model);
}
[HttpPost]
public ActionResult UpdateLicense(int id, LicenseModel model)
{
if (ModelState.IsValid)
{
model.Save();
}
return View("ViewLicense", model);
}
}
}
我的强类型视图,模型声明位于顶部:
@model MvcApplication3.Models.LicenseModel
<h2>ViewLicense</h2>
@using (Html.BeginForm("UpdateLicense", "License", FormMethod.Post))
{<div>
<div>@Html.HiddenFor(m=>m.ID) License Key :</div>
<div>@Html.EditorFor(m=>m.LicenseKey)</div>
</div>
<div>
<button type="submit" id="btnsubmit" value="SUBMIT">SUBMIT</button>
</div>
}
请注意,我没有使用ajax发布。
您需要修改RouteConfig.cs:
namespace MvcApplication3
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "License", action = "ViewLicense", id = UrlParameter.Optional }
);
}
}
}
在控制器中放置一个断点,并在UpdateLicense方法中看到更改的许可证密钥位于模型中。
希望它有所帮助!