我想在Umbraco网站上注册新成员,并允许他们访问保留区。
我需要从他们那里收集一些其他信息,例如他们的名字,姓氏,公司名称,电话号码等。
因此,对于 后端 ,在我的Umbraco网站的“成员”部分中,我这样做:
对于 前端 ,我使用Umbraco提供的“注册会员”代码段为新会员的注册表格创建了新的部分视图。 。
我只更改了registerModel的成员类型,指定了新的MemberType“ memberWebsite”,如摘要注释中所建议的那样。
@*
You can specify a custom member type alias in the constructor, the default is 'Member'
for example, to use 'Custom Member' you'd use this syntax:
var registerModel = Members.CreateRegistrationModel("Custom Member");
*@
//var registerModel = Members.CreateRegistrationModel();
var registerModel = Members.CreateRegistrationModel("memberWebsite");
新成员自定义属性的字段正确显示在注册页面中。
我用一些值填充它们,然后单击“提交”按钮。
我希望在创建的新成员上找到这些值,但只保存标准字段(例如,名称,电子邮件,密码)。
自定义属性完全空白,就像我从未填写过一样。
如何使用输入的值正确保存自定义属性?
PS:我正在运行Umbraco 7.14.0。
答案 0 :(得分:0)
您需要指定要填充的成员属性。 请尝试以下操作:
import React, { Component } from "react"
import { compose } from "recompose"
import {
withScriptjs,
withGoogleMap,
GoogleMap,
Marker,
InfoWindow, Listing
} from "react-google-maps"
const MapWithAMarker = compose(withScriptjs, withGoogleMap)(props => {
const listStyle = {
width: '250px',
position: "relative"
}
return (
<div style={{ position: "relative" }}>
<GoogleMap defaultZoom={4} defaultCenter={{ lat: 56.263920, lng: 9.501785 }}>
{props.markers.map(marker => {
if (marker.lat != null) {
const onClick = props.onClick.bind(this, marker)
return (
<Marker
key={marker.customerNumber}
onClick={onClick}
position={{ lat: parseFloat(marker.lat), lng: parseFloat(marker.lng) }}
>
{props.selectedMarker === marker &&
<InfoWindow>
<div>
<h1> {marker.name}</h1>
<br />
{marker.address}
<br />
{marker.zipcode} {marker.city}
<br />
Telephone: {marker.phone}
</div>
</InfoWindow>}
{/* List resellers here, so info window can be reused I guess, not sure */}
</Marker>
)
}
})}
</GoogleMap>
</div>
)
})
export default class ResellerGoogleMap extends Component {
constructor(props) {
super(props);
this.state = {
showingInfoWindow: false,
selectedMarker: {},
selectedPlace: {}
};
this.handleClick = this.handleClick.bind(this);
}
handleClick(marker, event) {
console.log(this.props)
this.setState({
selectedMarker: marker
});
}
render() {
return (
<div style={{ padding: "24px 13px 2px 2px" }}>
<input type="button" value="My Location" style={{ marginBottom: "20px" }} onClick={(e) => this.onBtnClick()} />
<MapWithAMarker
selectedMarker={this.state.selectedMarker}
markers={this.props.resellerData}
onClick={this.handleClick}
googleMapURL="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places"
loadingElement={<div style={{ height: `100%`, padding: `61px 55px 55px 55px` }} />}
containerElement={<div style={{ height: `800px` }} />}
mapElement={<div style={{ height: `511px` }} />}
/>
</div>
);
}
}
答案 1 :(得分:0)
好的,我找到了解决该问题的方法。
“注册会员”代码段中的代码[不工作]
@if (registerModel.MemberProperties != null)
{
for (var i = 0; i < registerModel.MemberProperties.Count; i++)
{
@Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name)
@Html.EditorFor(m => registerModel.MemberProperties[i].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
<br />
}
}
我没有遍历带有索引i的MemberProperties数组,而是能够通过逐个检索属性来访问属性。我使用了实际的索引号而不是变量i。
新代码[工作中]
@if (registerModel.MemberProperties != null)
{
// first property
@Html.LabelFor(m => registerModel.MemberProperties[0].Value, registerModel.MemberProperties[0].Name)
@Html.EditorFor(m => registerModel.MemberProperties[0].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[0].Alias)
<br />
// second property
@Html.LabelFor(m => registerModel.MemberProperties[1].Value, registerModel.MemberProperties[1].Name)
@Html.EditorFor(m => registerModel.MemberProperties[1].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[1].Alias)
<br />
// ... and so on for all the other MemberProperties defined in my MemberType
}
}
由于某种原因,for循环在所有属性属性中添加了前缀“ CS $ <> 8__locals1”。 注册表单传递的属性的别名与MemberType中定义的属性的别名不匹配。
使用此修复程序,别名匹配和属性值正确保存在创建的新成员上。