我已经看到了许多将从 ViewModel 生成的选择列表数据传递到 MVC 控制器的示例,但我还没有看到如何从普通<select>HTML5 标记传递所选值的示例。例如,在我的视图中,我有:
<select id="Type">
<option value="Game">Game</option>
<option value="Collection">Collection</option>
<option value="Cinema">Cinema</option>
<option value="Book">Book</option>
</select>
Run Code Online (Sandbox Code Playgroud)
如何将选择列表中的选定值向下传递到我的控制器,以便我可以将其添加到我的 EF 模型中?
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddSection(Section NewSection, HttpPostedFile LogoFile)
{
if (ModelState.IsValid)
{
try
{
if (LogoFile != null && LogoFile.ContentLength > 0)
{
if (LogoFile.ContentType == "image/png")
{
string FileName = NewSection.RouteName + "Logo";
NewSection.LogoFileID = FileUploadHelper.UploadSiteImage("Logos", FileName, LogoFile);
}
else
{
ModelState.AddModelError("File Type", "Logo Files must be PNG files.");
return View(NewSection);
}
}
using (db)
{ …Run Code Online (Sandbox Code Playgroud) 我的 MVC 应用程序中发生了一件非常奇怪的事情。我正在将部分视图渲染到引导弹出窗口中。控制器操作如下所示:
[HttpGet]
public ActionResult GetModalForm(int id)
{
var vm = CreateViewModel(id)
return PartialView("MyPartialView", vm);
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,视图模型中有两个字段:
public class MyViewModel
{
public int id { get; set; }
public int MemberId {get ; set;}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,当我在控制器操作中放置断点时,id 和 MemberId 字段设置正确。
现在事情变得古怪了,我的部分视图中有以下几行(用于测试问题):
@using ()
{
@Html.TextBox("id", Model.id)
@Html.TextBox("something", Model.id)
<input type='submit'/>
}
Run Code Online (Sandbox Code Playgroud)
渲染时,第一行给出一个文本框,其值等于 MemberId 字段,第二行给出的值等于 id 字段。我真的不明白这两行如何为同一字段提供不同的值。奇怪的是为什么第二行读取的是 MemberId 字段?
有没有人以前见过类似的事情,或者有任何想法可能导致它?我已经无计可施了。
预先感谢您的任何帮助。
更新:
为了帮助进一步解释发生的情况:如果我的视图模型属性是 id=x 和 MemberId=y。然后是以下行:
@Html.HiddenFor(m => m.id)
Run Code Online (Sandbox Code Playgroud)
将渲染为:
<input type="hidden" id="id" name="id" value="y"/>
Run Code Online (Sandbox Code Playgroud) 我试图在asp.net mvc文件夹结构的模型文件夹中添加部分类。我已经使用实体框架添加了该类。我想在model文件夹中创建一个partial类,如何创建?
我的 MVC 应用程序是在根/全局级别设置控制器的。这些没有明确的区域。我还有一个“管理”区域。以 /admin/ 开头的 URL 将路由到管理区域中的匹配控制器。其他 URL 将路由到匹配的全局控制器。这在大多数情况下工作正常。
我遇到的问题是,如果 URL 与管理区域中的控制器匹配,而全局区域中不存在同名控制器,则请求会错误地路由到管理区域中的控制器。我知道这种情况正在发生,因为我在相关控制器中的匹配操作上放置了断点。
例如,我有一个CalendarController在管理区域中调用的控制器。当我访问时/admin/calendar,它起作用,因为它在 中找到了操作和相应的视图Areas/Admin/Views/Calendar/Index.cshtml。当我访问时出现问题/calendar。我在根级别没有名为 Calendar 的控制器,但由于某种原因,它将请求路由到管理区域CalendarController,这是我不想要的。我希望它返回 404,因为CalendarController根级别不存在。相反,我收到错误,因为它正在根级别(位于 )搜索视图,/Views/Calendar/Index.cshtml即使匹配的控制器位于管理区域中。
如何防止在管理区域中搜索匹配的控制器,除非 URL 中包含 /admin ?
这是相关的路由代码,除了添加命名空间之外,基本上都是现有的。如果没有命名空间,问题仍然会发生。实际应用程序中有更多路线,但我在全新的 MVC 项目中得到了相同的行为。
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "AreaProblem.Areas.Admin.Controllers" }
); …Run Code Online (Sandbox Code Playgroud) 嘿所有我想找到一种方法(或者如果可能的话)来调用这段代码:
<nav>
<ul class="nav navbar-nav">
@if (Session["chosenAMT"] is bool == true)
{
@Html.Partial("_Menu")
}
</ul>
</nav>
Run Code Online (Sandbox Code Playgroud)
当它启动页面时,selectedAMT的值为false,因此导航不会在_Layout.cshtml页面上加载.
但是,一旦用户从下拉列表中选择一个值,我需要启用该部分视图,以便它现在可以向用户显示导航.
当用户从下拉列表中选择一个值时,我将POST调用到HomeController.cs:
$.ajax({
type: 'POST',
url: 'Home/showNav',
cache: false,
dataType: 'json',
data: {},
success: function (response) {
console.log('worked');
},
error: function (response) {
console.log(response);
}
});
Run Code Online (Sandbox Code Playgroud)
这是HomeController.cs中的showNav代码:
[HttpPost]
public string showNav()
{
Dictionary<string, string> resultsBack = new Dictionary<string, string>();
Session["chosenAMT"] = true;
resultsBack.Add("dback", "GOOD");
resultsBack.Add("dhead", "worked");
resultsBack.Add("dinfo", …Run Code Online (Sandbox Code Playgroud) 我正在开发 ASP.NET MVC 5 应用程序,但在将数据存储到会话时遇到问题。我得到的值始终为空。
这是我设置会话的地方:
string mail = user.Email;
string response = user.CheckEmail();
Session["email"] = mail;
Run Code Online (Sandbox Code Playgroud)
我在这里测试会话,它正在重定向到 YYY:
if ((string)Session["mail"] != null)
{
return RedirectToAction("PPP");
}
else
{
return RedirectToAction("YYY");
}
Run Code Online (Sandbox Code Playgroud)
请立即提供帮助,我们将不胜感激。谢谢
我有一个关于在Asp.net Mvc 5应用程序中创建"瘦控制器"的实现的问题.在过去的几天里,我研究了这个主题,我相信我需要一个具体的例子,以便在理解中连接点.
所以,我想在我的应用程序中使用单元测试.我已经看了创建视图模型工厂和工人,瘦控制器,脂肪模型,但我不肯定唱诗班如何实现任何,我已经在这个特殊的情况下了解这些设计模式.
您可以在下面找到我的管理控制器中的5种不同操作.我担心它们闻起来需要一些清理以简化测试/单元测试.我知道这些类型的问题通常没有"正确的答案",所以我非常感谢所有有助于简化测试我的应用程序的答案.
这是我的行动:
行动#1:
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = "DM_Admin")]
public async Task<ActionResult> Users_Create([DataSourceRequest] DataSourceRequest request, ManageUsersViewModel model)
{
if (model != null && ModelState.IsValid)
{
// instantiate new application user
var user = new ApplicationUser
{
UserName = model.Email,
Email = model.Email,
FirstName = model.FirstName,
LastName = model.LastName
};
// format the RolesList to type List<string> for entry
List<string> rolesToAssign = getRoleNameList(model);
try
{
// persist user to User Db
var createResult = await UserManager.CreateAsync(user, model.Password);
if …Run Code Online (Sandbox Code Playgroud) 如果我的表单中的表单中存在错误,我会尝试发出警报,如下所示,有一些文本字段验证
<div class="form-group">
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-4 col-xm-12">
<label class="control-label form-text-align text-top-padding ">
@Resources.StandardPrice
</label>
</div>
<div class="col-lg-8 col-md-8 col-sm-8 col-xm-12 text-top-padding">
@Html.TextBoxFor(model => model.products.BasicPrice, new { @class = "form-control errorClass", @id = "basicPrice", @placeholder = @Resources.StandardPrice, @onblur = "addClass(this)", @maxlength = Resources.AddNewProductFieldMaxLength })
@Html.ValidationMessageFor(model => model.products.BasicPrice, null, new { @class = "help-inline" })
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果表格中有错误,我该如何发出提醒
通常在网页上创建表单时,我需要我们的客户填写一个字段,例如永久地址以及当前地址(选中复选框后,当前地址会自动填写)。我可以使用 JavaScript 将表单数据从一个字段复制到另一个字段,而不是让我们的客户填写两次表单。
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div>
<div class="well">
<b>Parmanent Address </b>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<div class="col-lg-12">
@Html.LabelFor(model => model.ParFirstAddr, htmlAttributes: new { @class = "control-label " })
@Html.EditorFor(model => model.ParFirstAddr, new { htmlAttributes = new {@class = "form-control", autocomplete = "off", @placeholder = "Enter Address" } })
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="col-md-12">
@Html.LabelFor(model => model.ParFirstPO, htmlAttributes: new { @class = "control-label " })
@Html.EditorFor(model => model.ParFirstPO, new { htmlAttributes = …Run Code Online (Sandbox Code Playgroud) 我今天在我的项目上做一些事情,我注意到一个项目内的所有索引页面上都发生了一些非常奇怪的事情。例如,我的操作如下所示:
public ActionResult Index(string id=null, string IsOld=null)
{
string id = null;
string IsOld = null;
return View();
}
Run Code Online (Sandbox Code Playgroud)
在没有任何指示性原因的情况下,此方法调用了两次。例如,如果我将断点放在:
string id = null;
Run Code Online (Sandbox Code Playgroud)
当页面加载时,我会看到编译器在该行代码上停止两次......在某些页面上这不会发生......我已经检查了页面和脚本,但没有任何迹象表明调用相同的方法加载时两次......这很奇怪,我不知道为什么会发生这种情况?
以前有没有人遇到过这种问题,有人可以帮助我吗?
PS我还尝试禁用此页面上的所有脚本,以便排除某些javascript正在发布或两次调用该方法的可能性......即使禁用所有脚本,我仍然收到双重调用......
asp.net-mvc-5 ×10
c# ×6
asp.net-mvc ×4
asp.net ×2
actionresult ×1
html ×1
html-helper ×1
javascript ×1
jquery ×1
model ×1
razor ×1