我不知道我是否正确地解释了这一点,或者解决方案是否相当简单,所以这里是:
我正在使用MvcMailer,但在此之前我设置了一个向导输入表单,我称之为Quote.cshtml.在Quote.cshtml后面,我建立了一个名为QuoteModel.cs的模型.
Quote.cshtml最基本的(我省略了所有的向导逻辑,只显示一个输入):
<td width="40%">
@Html.LabelFor(m => m.FirstName, new { @class = "mylabelstyle", title = "Enter first name." })
</td>
<td width="60%">
@Html.TextBoxFor(m => m.FirstName)
@Html.ValidationMessageFor(m => m.FirstName)
</td>
Run Code Online (Sandbox Code Playgroud)
QuoteModel.cs(再次,只显示一个输入; nb:使用DataAnnotationExtensions)
public class QuoteModel
{
[Required(ErrorMessage = "First Name required.")]
[Display(Name = "First Name:")]
public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试集成MvcMailer,它设置了IQuoteMailer.cs,QuoteMailer.cs,_Layout.cshtml和QuoteMail.cshtml.QuoteMail.cshtml是邮件的收件人最终会看到的内容.我还设置了一个QuoteController.cs,我在其中放置了MvcMailer所需的相应代码.它位于QuoteMailer.cs和QuoteController.cs中,我在从Quote.cshtml(基于QuoteModel.cs中的模型)传递用户输入时遇到问题.
IQuoteMailer.cs:
public interface IQuoteMailer
{
MailMessage QuoteMail();
}
Run Code Online (Sandbox Code Playgroud)
QuoteMailer.cs:
public class QuoteMailer : MailerBase, IQuoteMailer
{
public QuoteMailer():
base()
{
MasterName="_Layout";
}
public virtual MailMessage …Run Code Online (Sandbox Code Playgroud) 我是一个使用这些源控制方法的n00b.我刚刚注册了简单的VS在线.以前,当我使用Orchard的来源时,我把它放在我的OneDrive中,以便在办公室和家中工作.它工作得很好.
但现在我想尝试VS在线.我想因为Orchard的源文件夹是如何设置的,我不能从顶级Orchard"添加源代码控制解决方案"(即打开〜/ src文件夹下包含的Orchard.sln).从我在研究中收集的内容中你必须手动添加内容,但我甚至无法做到这一点.
我在VS在线创建了一个项目,并尝试"映射"它,但是没有成功(它只是添加了一些构建过程模板).
任何人都知道在线添加干净的Orchard 1.8源的步骤.先感谢您.
编辑:添加100赏金 我在这里真的没有选择,所以希望100的赏金能给我一个详细的答案,并给出正确的步骤来完成这个.
我最初使用的是OneDrive(7GB免费版),但是对于Orchard源我的空间不足(我还有其他工作,Orchard的空间不到1/2).我也有OnDrive for Business(我认为是20GB),这应该已经足够了,但是他们将文件数量限制在20,000,而在我的源代码中使用第三方模块/主题我运行的时候接近这个数字而且文件不会因为这个限制同步.
在我看来,免费的VS Online将是最好的选择,然后让我在家庭和工作之间推/拉变化.
任何帮助都非常感谢,我希望我的小额赠金足以引出一些好的答案.
谢谢!
我正在使用这样的代码来检测浏览器并应用条件来显示或不显示<label>:
@{
var settings = Model.PartFieldDefinition.Settings.GetModel();
System.Web.HttpBrowserCapabilitiesBase theBrow = Request.Browser;
}
<fieldset>
@{
if ((theBrow.Browser == "IE") && (theBrow.MajorVersion < 10))
{
@:<label>@Model.DisplayName</label>
@://Some Code for inputs
}
else
{
@://Some Code for inputs
}
}
</fieldset>
Run Code Online (Sandbox Code Playgroud)
我一直试图弄清楚我是否可以(如果可以,如何)我可以利用这个逻辑来检测用户在网站中显示或不显示的路径 <label>
例如,在我希望显示标签的任何其他路径上。但是,对于 ~/Services (路径)下的页面,我希望能够隐藏标签。
它比那更复杂一点。该代码位于一个编辑器模板中,该模板在整个站点中使用。如果我在编辑器模板中使用 CSS 来“隐藏”标签,我将影响所有页面。我希望通过上述逻辑我可以避免这种情况,并且只在路径下的某些页面上应用我的逻辑。
谢谢。
更新 我尝试了以下方法:
@{
string CurrentURL = Request.ApplicationPath;
}
<fieldset>
@{
if ((CurrentURL == "Services")) // also tried "/Services"
// rest of code left out for brevity
}
Run Code Online (Sandbox Code Playgroud)
但是标签隐藏在所有页面上,甚至在路径“~/Services”之外。我坚持语法。
找到答案
我做了以下事情:
@{
string …Run Code Online (Sandbox Code Playgroud) 我有条不紊地使用javascript在动态表单中的网格中显示其他表单域.因此,如果我有一个带有是/否选择的单选按钮,"是"将显示<div id="whatever">带有其他问题的网格(使用),并且"否"将不显示网格.
现在,当通过工作流发送电子邮件时,我想确定是否显示任何响应,具体取决于动态表单中的是/否选择.这样,如果选择"否",那么这些附加问题就没有答案,因此电子邮件不会显示它们; 而如果选择"是",那么这些问题将与用户输入的响应一起显示在电子邮件活动中.
但我很难知道如何实现这一目标.
我开始讨论使用Decision Activity,特别是Workflow.SetState();通过设置{Shape.Execute:Shape1}变量,但它只传递文字字符串而不是执行形状.
这是我的决策活动代码:
var choice = "#{FormSubmission.Field:RadioChoice}";
var choiceDisplay = "";
if (choice == "Yes") choiceDisplay = "{Shape.Execute:Shape1}";
else if (choice == "No") choiceDisplay = "{Shape.Execute:Shape2}";
Workflow.SetState("InsertShape", choiceDisplay);
SetOutcome("Done");
Run Code Online (Sandbox Code Playgroud)
这就是我在电子邮件活动中使用它的方式:
{Workflow.State:SetState}
我不确定这是否会奏效.任何指导表示赞赏.
如果情况不起作用,我该怎么做呢?
我不相信这是一个专门的MvcMailer问题(这是我正在使用的邮件),但我正在努力构建Googleplex搜索,以找出如何根据我的上下文从不同帐户发送电子邮件.
我需要从两个不同的电子邮件帐户发送两封电子邮件.我试过用
mailMessage.From = new MailAddress("some-other-email@gmail.com");
Run Code Online (Sandbox Code Playgroud)
在MvcMailer中,但这甚至没有显示在我转储到临时目录的电子邮件中.它显示为web.config中的内容:"some-email@gmail.com".
这是我对MvcMailer的web.config:
<mailSettings>
<!-- Method#1: Configure smtp server credentials -->
<!--<smtp from="some-email@gmail.com">
<network enableSsl="true" host="smtp.gmail.com" port="587" userName="some-email@gmail.com" password="valid-password" />
</smtp>-->
<!-- Method#2: Dump emails to a local directory -->
<smtp from="some-email@gmail.com" deliveryMethod="SpecifiedPickupDirectory">
<network host="localhost" />
<specifiedPickupDirectory pickupDirectoryLocation="c:\temp\" />
</smtp>
</mailSettings>
Run Code Online (Sandbox Code Playgroud)
这是邮件代码:
public virtual MailMessage EMailConsultation(EMailConsultationData model)
{
var mailMessage = new MailMessage { Subject = "INQUIRY: E-Mail Consultation" };
mailMessage.From = new MailAddress("some-other-email@gmail.com");//I tested this to see if at the very least it would …Run Code Online (Sandbox Code Playgroud) 在我看来,我这样称呼小数:
@ViewBag.CalculatePrice
Run Code Online (Sandbox Code Playgroud)
我怎样才能格式化它来表示 $xxx.xx?
CalculatePrice 只是public decimal CalculatePrice() { //performing calculation }一个类。
谢谢。
我开始这样做是为了在我的视图中显示一些复选框:
@Html.LabelFor(m => m.MyEnum, T("Pick Your Poison"))
<div>
@for(int i = 0; i < Model.Alcohol.Count; i++)
{
<label>
@T(Model.Alcohol[i].Text)
@Html.CheckBoxFor(m => Model.Alcohol[i].Selected)
@Html.HiddenFor(m => Model.Alcohol[i].Value)
</label>
}
</div>
Run Code Online (Sandbox Code Playgroud)
请注意:这里重要的是@T方法,用于处理文本到其他语言的翻译.
这有效.我有一个简单的enum,后端的一些方法将它变成视图中的文本.所以,enum如:
public enum MyEnum
{
Beer = 1,
Vodka = 2,
Rum = 3
}
Run Code Online (Sandbox Code Playgroud)
将显示包含这3个选项的复选框列表.在我的ViewModel中,我这样做:
Alcohol= Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(x =>
{
return new SelectListItem {
Text = x.ToString().ToUpper(), Value = ((int)x).ToString()
};
}).ToList();
}
Run Code Online (Sandbox Code Playgroud)
但是,我想在复选框旁边添加更多描述性文本.我宁愿enum有这个或类似的系统类型(我将解释下划线):
public enum MyEnum
{
I_like_Beer = 1,
I_hate_Vodka = …Run Code Online (Sandbox Code Playgroud) 无法找到解决此问题的正确方法.
我正在使用[Serializable](MVC3期货)以获得具有单独视图的"向导".这是我的控制器中要序列化的代码:
private MyViewModel myData;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["myData"];
if (serialized != null) //Form was posted containing serialized data
{
myData = (MyViewModel)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed);
TryUpdateModel(myData);
}
else
myData = (MyViewModel)TempData["myData"] ?? new MyViewModel();
TempData.Keep();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["myData"] = myData;
}
Run Code Online (Sandbox Code Playgroud)
沿着我的控制器还我这样做(只是一个片段 - 代码经过与向前和后退按钮Strings向导):
public ActionResult Confirm(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Details");
else if ((nextButton != null) && …Run Code Online (Sandbox Code Playgroud) 我一生都无法将它与我现有的代码一起使用,但我正在尝试将我的enum选择保存为 NHibernate 中的字符串。基本上,我有一个 UI 复选框,如果用户选择多个复选框,我想存储这些选择。现在,我可以让 NHibernate 存储一个选择(例如,从下拉列表或单选按钮列表中,用户仅限于一个选择)。
这是我对枚举的jist:
public enum IncomeType
{
[Display(Name = "Full-Time Employment")]
FullTime,
[Display(Name = "Part-Time Employment")]
PartTime,
[Display(Name = "Self-Employment")]
SelfEmployed,
[Display(Name = "Rental")]
Rental,
[Display(Name = "Social Security Payments")]
SocialSecurity,
[Display(Name = "Retirement / Pension Payments")]
Retirement,
[Display(Name = "Child Support Payments")]
ChildSupport,
[Display(Name = "Spousal Maintenance")]
Maintenance,
[Display(Name = "Other")]
Other
}
Run Code Online (Sandbox Code Playgroud)
我使用一种方法来“选择”是否显示复选框列表(如果我BulkItemThreshold的选项数量等于选项数,则显示一个复选框列表)。这是那个方法:
public static IEnumerable<SelectListItem> GetItemsFromEnumString<T>
(T selectedValue = default(T)) where T : struct
{
return from name …Run Code Online (Sandbox Code Playgroud) 不确定如果可能,但我在课堂上有这个:
public string TextNotIncluded
{
get
{
return ("which is <u>not</u> included in the Quote");
}
}
Run Code Online (Sandbox Code Playgroud)
在<u>与</u>被显示在我看来,而非字不被强调.我不熟悉C#.
任何人都可以提供快速解答吗?
谢谢.
编辑:
我只是在我的观点中这样说:@MyClass.TextNotIncluded.@Html.Raw在我的情况下,将它包装起来并不高效,因为我在整个数十个视图中都散布了它.
我正在尝试将一个另存enum为逗号分隔的列表保存在数据库中。
我知道我可以做这样的事情来实际存储逗号分隔的列表:
part.MyProperty = new[] {"foo", "bar"};
Run Code Online (Sandbox Code Playgroud)
并且数据库将有一个条目“ foo,bar”。
我不知道该怎么做是如何存储enum,例如:
public enum Choices { Choice1, Choice2, Choice3 }
Run Code Online (Sandbox Code Playgroud)
我收集到我必须使用Parse和ToString使用enum值的信息,但是我不确定该怎么做。
这似乎不正确:
part.MyProperty = new[] return from name in Enum.GetNames(typeof(T))
let enumValue = Convert.ToString((T)Enum.Parse(typeof(T), name, true))
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我昨天问了这个问题.
我相信我已经找到了使用TempData的答案.我的新问题是,是否通过动作(如向导步骤)沿着TempData进行串行将"保留"所有先前的TempData,或者如果我必须在每个动作中继续重新声明以"保持"它.
因此,如果TempData Step1具有字段1,2和3,然后Step2具有字段4,5和6,那么将在步骤3中保留1到6:
[HttpPost]
public ActionResult Step1 (Step1Model model)
{
if (ModelState.IsValid)
{
TempData["Step1"] = model;
return RedirectToAction("Step2")
}
return View(model);
}
public ActionResult Step2 (Step2Model model)
{
Step1Model step1 = (Step1Model)TempData["Step1"]
if (step1 == null)
{
return RedirectToAction("Step1")
}
TempData.Keep("Step1")
if (ModelState.IsValid)
{
TempData["Step2"] = model;
return RedirectToAction("Step3")
}
return View(model);
}
public ActionResult Step3()
{
TempData.Keep() // is this keeping Step1 and Step2?
return View();
}
Run Code Online (Sandbox Code Playgroud)
以上内容过于简单.最终,我可能有6个或7个步骤,想知道是否有第三步:当我在第二步(即没有重新声明使用第一步和第二步的:在一个新的第三步,我会写Step1Model step1...;和Step2Model step2...;?
我通常对在 Razor Pages 中使用某些 C# 返回类型的“为什么”(而不是“如何”)感到困惑。在某些情况下,我理解“为什么”,但不清楚何时应该使用一个而不是另一个。我最初的困惑始于异步类型,但现在我明白了。这也加剧了void类型,我对它有了更好的理解,但仍然没有完全理解。
我正在研究几个不同的代码片段以更好地掌握,并且可以使用一些有用的解释 - 文档和其他来源并没有真正为我带回家。
有些方法来自某些 DI,不一定相关(我认为,就我所知,这是使用一种返回类型而不是另一种返回类型的原因,在这种情况下,我感谢解释)。这里有一些不同的片段,我希望社区可以帮助我更好地理解“为什么”使用一种返回类型而不是另一种返回类型(或者我是否应该坚持使用一种类型,因为它不会影响结果正在做什么)。
第一的:
public void OnGet()
{
ServicesContainer = _helper
.GetRecentContentItemsByContentTypeAsync("Services")
.GetAwaiter()
.GetResult()
.SingleOrDefault();
ServicesList = _helper
.GetRecentContentItemsByContentTypeAsync("Service")
.GetAwaiter()
.GetResult()
.OrderByDescending(c => c.CreatedUtc)
.Take(3);
}
Run Code Online (Sandbox Code Playgroud)
代码本身我理解没有问题 - 它正在检索容器和其中的列表项。我的 Razor 页面只是使用重复foreach循环显示列表项。我也了解代码正在获取此信息,这是最基本的示例。所以在我的理解中没有问题。
第二:
public async Task OnGetAsync(string projectTitle)
{
Project = _helper
.QueryContentItemsAsync(q => q
.Where(c => c.DisplayText == projectTitle))
.GetAwaiter()
.GetResult()
.SingleOrDefault();
var relatedProjects =
(IEnumerable<string>)Project?
.Content
.Project.RelatedProjects?
.ContentItemIds?.ToObject<string[]>();
if (relatedProjects?.Count() > 0)
{
RelatedProjects = await
_helper.GetContentItemsByIdAsync(relatedProjects); …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×4
c# ×3
orchardcms ×3
mvcmailer ×2
razor ×2
azure-devops ×1
c#-4.0 ×1
enums ×1
model ×1
nhibernate ×1
razor-pages ×1
smtpclient ×1
view ×1