我正在尝试构建一个非常简单的网站来显示一些正在添加的测试数据。使用asp.net mvc(使用razor)更新,但每当数据发布到我的Post
方法时,我的数据都没有更新。我试图让一个无序列表(现在)在第二个帖子被触发时更新。
我使用以下代码将我的数据发布为JSON
:
string jsonDeviceData = SerializeHelper.Serialize<IDeviceData>(deviceData,
ContentTypeEnum.Json, false);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(localServerUrl);
webRequest.Method = "POST";
webRequest.ContentType = "application/json"; //"application/x-www-form-urlencoded";
byte[] deviceDataBuffer = Encoding.UTF8.GetBytes(jsonDeviceData);
Task<Stream> requestTask = webRequest.GetRequestStreamAsync();
using (Stream requestStream = requestTask.Result)
{
requestStream.Write(deviceDataBuffer, 0, deviceDataBuffer.Length);
}
Task<WebResponse> responseTask = webRequest.GetResponseAsync();
using (StreamReader requestReader = new StreamReader(responseTask.Result
.GetResponseStream()))
{
string webResponse = requestReader.ReadToEnd();
Debug.WriteLine("Web Response: " + webResponse);
}
以下是我在POST方法中使用的代码。不要担心逻辑是如此简单,可能是可怕的,但我只是在涉及这个想法。数据将存储在SQL Server数据库中,如果我决定更进一步,我将使用EF:
[HttpPost()]
public ActionResult Index(DeviceModel model)
{
if (ModelState.IsValid && model != null)
{
var deviceViewModelList = HttpContext.Application["DeviceList"]
as List<DeviceViewModel> ?? new List<DeviceViewModel>();
if (deviceViewModelList.All(m => !string.Equals(m.Name,
model.Name,
StringComparison.InvariantCultureIgnoreCase)))
{
deviceViewModelList.Add(new DeviceViewModel(model));
}
HttpContext.Application["DeviceList"] = deviceViewModelList;
var homePageViewModel = new HomePageViewModel
{
DeviceList = deviceViewModelList
};
return RedirectToAction("Index");
}
else
{
return View();
}
}
我的模型正确传递,即使在调用RedirectToAction("Index");
下面的代码在第一次加载页面时调用RedirectToActio(“Index”)后调用:
public ActionResult Index()
{
ViewBag.Title = "Test Server";
var deviceViewModelList = HttpContext.Application["DeviceList"]
as List<DeviceViewModel> ?? new List<DeviceViewModel>();
var homePageViewModel = new HomePageViewModel
{
DeviceList = deviceViewModelList
};
return View(homePageViewModel);
}
这是我在.cshtml页面中的代码:
<ul>
@if (Model?.DeviceList != null)
{
foreach (var device in Model.DeviceList)
{
<li>@device.Name</li>
}
}
</ul>
Fiddler
,则数据(在本例中为列表)是正确构建的。我在这个阶段看过很多文章,我仍然没有解决方案,其中一个是View not updated after post,而我已经尝试了ModelState.Clear();
,你可以从我看到代码我正在使用@device.Name
,这是建议之一。我不确定最后一个。
我读过的另一篇文章是ASP NET MVC Post Redirect Get Pattern但又无济于事。
我显然错过了什么。
我一直在寻找的大多数文章/样本都是指通过Form
发帖,我知道我在发帖,但这与通过Form
发帖相同吗?
此外,我的页面的viewModel适用于我的页面,它包含设备列表。可以,而不是将设备列表作为viewmodel传递给页面吗?我这样做的原因是我想在稍后阶段访问其他列表。
有人有任何建议吗?
非常感谢。